·peekmessage. 如果peekmessage被调用,并设置了pm_noyield标记,peekmessage在此刻返回一个空值,这个空返回值指出已经没有要处理的消息了。如果没有设置pm_noyield标记,peekmessage就在此刻让出控制权。它不会休眠,但会单一的交给其它已准备好的应用程序一个执行的机会。(请参阅下面的“让步与休眠的不同)当让步返回,peekmessage直接将控制权返回到应用程序,并返回一个空值,它指出这个应用程序没有要处理的消息了。
•getmessage. 在此刻,getmessage会让应用程序休眠、等待,直到一些事件发生需要唤醒应用程序。控制权不会返回到调用getmessage的应用程序,直到有应用程序必须去处理的消息出现。一旦这个应用程序从被置入休眠状态中醍来,getmessage内部的循环将回到最开始(步骤1)。
wh_getmessage钩子
在getmessage和peekmessage将一个消息返回到调用的应用程序之前,会做一个验证是否存在一个wh_getmessage钩子的测试。如果有一个已经被安装了,那这个钩子会被调用。如果peekmessage没有发现可用的消息并返回一个空值时,这个钩子将不会被调用。在钩子处理过程中,你不可能得知是到底是getmessage被调用还是peekmessage被调用。
扫描系统队列
综上所述,在系统队列中的事件仅仅是硬件事件的记录。那些代码扫描系统队列的主要任务是,从这些事件中创建消息,并确定哪一个窗体将接收这个消息。