2

我正在尝试使用 WM_COPYDATA IPC 方法发送 HWND。到目前为止,当发送一个字符串 LPCTSTR 时它可以工作。

LPCTSTR str = L"Test";
COPYDATASTRUCT cds;
cds.dwData = 20;
cds.cbData = sizeof(TCHAR) * wcslen(str);
cds.lpData = (PVOID)str;
LRESULT l = SendMessage(myhWnd, WM_COPYDATA, (WPARAM)nullptr, (LPARAM)&cds);

但是当使用 HWND 时,消息甚至没有到达......

COPYDATASTRUCT cds;
cds.dwData = 20;
cds.cbData = sizeof(HWND);
cds.lpData = (PVOID)targetWnd;
LRESULT l = SendMessage(myhWnd, WM_COPYDATA, (WPARAM)nullptr, (LPARAM)&cds);

PVOID 应该能够指向任何 afaik。

我的 HWND 都已设置,并且上述两种方法都将 0 作为 LRESULT 返回。我该如何调试?还是有什么根本性的错误?

4

1 回答 1

4

AnHWND不是指针。您很可能想要:

COPYDATASTRUCT cds;
cds.dwData = 20;
cds.cbData = sizeof(HWND);
cds.lpData = &targetWnd;
//           ^
LRESULT l = SendMessage(myhWnd, WM_COPYDATA, (WPARAM)nullptr, (LPARAM)&cds);

此外, source 和 destination 之间似乎有些混淆HWND,但也许这正是您命名它们的方式。

HWND正如乔纳森·波特(和其他一些评论者)指出的那样,如果您只想这样做,有更有效的发送. 的方法。

于 2021-06-02T20:16:08.463 回答