深入GetMessage和PeekMessage[7]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 fireseed 的 blog

·peekmessage. 如果peekmessage被调用,并设置了pm_noyield标记,peekmessage在此刻返回一个空值,这个空返回值指出已经没有要处理的消息了。如果没有设置pm_noyield标记,peekmessage就在此刻让出控制权。它不会休眠,但会单一的交给其它已准备好的应用程序一个执行的机会。(请参阅下面的“让步与休眠的不同)当让步返回,peekmessage直接将控制权返回到应用程序,并返回一个空值,它指出这个应用程序没有要处理的消息了。

getmessage. 在此刻,getmessage会让应用程序休眠、等待,直到一些事件发生需要唤醒应用程序。控制权不会返回到调用getmessage的应用程序,直到有应用程序必须去处理的消息出现。一旦这个应用程序从被置入休眠状态中醍来,getmessage内部的循环将回到最开始(步骤1)。

 

wh_getmessage钩子

getmessagepeekmessage将一个消息返回到调用的应用程序之前,会做一个验证是否存在一个wh_getmessage钩子的测试。如果有一个已经被安装了,那这个钩子会被调用。如果peekmessage没有发现可用的消息并返回一个空值时,这个钩子将不会被调用。在钩子处理过程中,你不可能得知是到底是getmessage被调用还是peekmessage被调用。

 

扫描系统队列

综上所述,在系统队列中的事件仅仅是硬件事件的记录。那些代码扫描系统队列的主要任务是,从这些事件中创建消息,并确定哪一个窗体将接收这个消息。

本文关键:GetMessage; PeekMessage
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top