【发布时间】:2017-05-06 05:44:45
【问题描述】:
我使用以下函数向应用程序发送消息。它似乎适用于 32 位应用程序,但不适用于 64 位应用程序(64 位应用程序似乎没有收到任何消息)。出了什么问题,我该如何解决?谢谢。
void MyTest::SendCmd(HWND hwnd, QString cmd)
{
COPYDATASTRUCT data;
data.dwData = FIXHEADER;
data.cbData = cmd.size()+1;
data.lpData = cmd.toLocal8Bit().data();
LPARAM lpdwResult;
LRESULT err = SendMessageTimeout(hwnd, WM_COPYDATA, 0, (LPARAM)&data, SMTO_ABORTIFHUNG, 2000, &lpdwResult);
}
//FIXHEADER is a fixed hex value that the application checks against to make sure the message is sent intentional for it.
【问题讨论】:
-
您是否尝试将消息发送到另一个进程的窗口句柄?
-
是的。消息从我的程序发送到另一个应用程序(32 位或 64 位)。另一个应用程序由 windows 句柄指定。 windows是win 7 64位。
-
这可能会有所帮助:您是否注意到
SendMessageTimeout()实际上是一个扩展为SendMessageTimeoutW()或SendMessageTimeoutA()的宏。 (“W”代表宽字符,即 Unicode,“A”代表 ANSI)它扩展的对象是 defined(在 C 的意义上),并且取决于 VS 设置的某些属性。但是,参数的类型也可能取决于此。 -
这行不通,我想。其他应用程序只接收
wparam和lparam的值;SendMessageTimeout不知道lparam其实是一个指针,还有更多的数据要传输。 -
发布的代码在目标应用程序是 32 位应用程序时有效,但如果目标应用程序是 64 位应用程序则无效。我尝试了 SendMessageTimeoutW() 和 SendMessageTimeoutA() 但也没有任何效果......还有其他想法吗?谢谢。
标签: c++ sendmessage