各位大侠好,小弟初来炸到,第一次提问题,做的不妥当的地方.请大家多包涵.问题描述:
代码: BOOL BSendJudge = ::PostMessage( HWND_BROADCAST, WM_DEVICECHANGE, wmsg, (LPARAM)( &dbv ) );
广播消息,返回值总是0,总是失败.用GetLastError()得到的结果是 "消息只能与同步操作一起使用。" 非常不理解,可能小弟
接触不深,但是这个函数不就是用于异步发送的嘛,为何又要让我同步使用?环境说明:
程序A: 创建一个<隐藏窗口>,用于监听设备变更消息.
程序B: 用于模拟发出设备变更消息 如上面代码所示.希望哪位高手能够给小弟点指点.1)难道一定要用SendMessageTimeout.那岂不是要阻塞到所有窗口过程都调用完毕或者
超时过了才能返回?2)群发消息不能异步?
代码: BOOL BSendJudge = ::PostMessage( HWND_BROADCAST, WM_DEVICECHANGE, wmsg, (LPARAM)( &dbv ) );
广播消息,返回值总是0,总是失败.用GetLastError()得到的结果是 "消息只能与同步操作一起使用。" 非常不理解,可能小弟
接触不深,但是这个函数不就是用于异步发送的嘛,为何又要让我同步使用?环境说明:
程序A: 创建一个<隐藏窗口>,用于监听设备变更消息.
程序B: 用于模拟发出设备变更消息 如上面代码所示.希望哪位高手能够给小弟点指点.1)难道一定要用SendMessageTimeout.那岂不是要阻塞到所有窗口过程都调用完毕或者
超时过了才能返回?2)群发消息不能异步?
sendmessage发送消息之后返回了程序才能向下执行,所以不应该用PostMessage
比如:
UINT uMsg = RegisterWindowMessage("Hello");
::PostMessage(HWND_BROADCAST,uMsg ,0,0);
我想说的是WM_DEVICECHANGE这个
PostMessage()这个函数只将消息放入到消息队列这个我是知道的,但是他的返回值对应的不是窗口函数的返回结果吧?这个我有点懵!
如果是SendMessage()这个函数我知道是直接调用了窗口的消息处理函数,返回值就是对应函数的返回结果,但是这个PostMessage()只是标识着非零为成功,0为失败....那怎么总是0呢,怎么就没出现过非零的情况?相当的郁闷!!!!
程序向下执行,
if(isbool)
{
}
但PostMessage还没有返回,isbool还是初始值0