微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以使用 WM_COPYDATA 发送窗口句柄?

如何解决是否可以使用 WM_COPYDATA 发送窗口句柄?

我正在尝试使用 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,(LParaM)&cds);

PVOID 应该能够指出任何错误

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

解决方法

HWND 不是指针。您最有可能想要:

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

此外,源 HWND 和目标 HWND 之间似乎有些混淆,但也许这只是您命名它们的方式。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。