各位大侠好,小弟初来炸到,第一次提问题,做的不妥当的地方.请大家多包涵.问题描述:
    代码:  BOOL BSendJudge = ::PostMessage( HWND_BROADCAST, WM_DEVICECHANGE, wmsg, (LPARAM)( &dbv ) );
广播消息,返回值总是0,总是失败.用GetLastError()得到的结果是 "消息只能与同步操作一起使用。" 非常不理解,可能小弟
接触不深,但是这个函数不就是用于异步发送的嘛,为何又要让我同步使用?环境说明:
    程序A:  创建一个<隐藏窗口>,用于监听设备变更消息.
    程序B:  用于模拟发出设备变更消息 如上面代码所示.希望哪位高手能够给小弟点指点.1)难道一定要用SendMessageTimeout.那岂不是要阻塞到所有窗口过程都调用完毕或者
  超时过了才能返回?2)群发消息不能异步?

解决方案 »

  1.   

    PostMessage把消息丢到消息列队里就不管了,程序继续执行,你得到0正常
    sendmessage发送消息之后返回了程序才能向下执行,所以不应该用PostMessage
      

  2.   

    HWND_BROADCAST是发给所有顶级窗口的
      

  3.   

    没有规定HWND_BROADCAST消息必须用SendMessage吧,你RegisterWindowMessage()了吗?
    比如:
    UINT uMsg = RegisterWindowMessage("Hello");
    ::PostMessage(HWND_BROADCAST,uMsg ,0,0);
      

  4.   


    我想说的是WM_DEVICECHANGE这个
      

  5.   

    感谢各位仁兄的帮忙,但是我在msdn中还真没看见关于WM_DEVICECHANGE 这类消息的限制啊.
    PostMessage()这个函数只将消息放入到消息队列这个我是知道的,但是他的返回值对应的不是窗口函数的返回结果吧?这个我有点懵!
    如果是SendMessage()这个函数我知道是直接调用了窗口的消息处理函数,返回值就是对应函数的返回结果,但是这个PostMessage()只是标识着非零为成功,0为失败....那怎么总是0呢,怎么就没出现过非零的情况?相当的郁闷!!!!
      

  6.   

    bool isbool=PostMessage(.....)之后
    程序向下执行,
    if(isbool)
    {
    }
    但PostMessage还没有返回,isbool还是初始值0