先谢谢了。
各位大哥,在家知道PeekMessage是读取本线程的消息,那么如何用它读取其它线程的消息呢?(在线等待)

解决方案 »

  1.   

    Msdn 这样定义的PeekMessage,找到你要读取得线程窗体的handle即可。
    BOOL PeekMessage(
      LPMSG lpMsg,         // message information
      HWND hWnd,           // handle to window
      UINT wMsgFilterMin,  // first message
      UINT wMsgFilterMax,  // last message
      UINT wRemoveMsg      // removal options
    );
      

  2.   

    hWnd可能没用。
    现在我的实际情况是这样的,我在主线程当中作长时间的循环操作,我想按ESC键时退出,但是,如果我反PeekMessage函数放在这个循环里面,势必造成大量的浪费,因为有可能一秒钟同调用n个PeekMessage,我想把这个PeekMessage单独放到线程中,然后Sleep(1000)再调用PeekMessage来检测是否按了ESC。
      

  3.   

    PeekMessage只能读取本线程内的消息,哪怕指定窗口Handle也不行:)
      

  4.   

    把PEEKMESSAGE放在你的循环里面造成不了什么浪费吧?
      

  5.   

    在循环里用一个ProcessMessages,就可以让主窗体响应ESC
      

  6.   

    to  citytramper(^o^) 
    这个办法太土了,严重影响效率 :)
      

  7.   

    我想你的思路是否应该换成:
    在线程里长时间操作,在主线程里响应用户中止。
    因Delphi在主线程更新UI
      

  8.   

    TO:楼主,你最好实际写程序测试一下效率。
    citytramper(^o^) 办法是土,但未必严重影响效率。
    消息循环同线程上下文切换比较起来,我认为后者更影响效率。
      

  9.   

    肯定用钩子了,为什么不写点代码试试?难道代码也要别人帮你写吗?
    看看VC的工具Spy++是怎么实现的!