GetMessage与PeekMessage的区别及其在WH_GETMESSAGE钩子中的不同表现

本文详细介绍了Windows消息队列处理函数GetMessage和PeekMessage的区别,包括它们的工作机制、返回值特点及参数使用,特别强调了PeekMessage的保留消息与移除消息选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

区别一: peekmessage不管消息队列里有没有消息都会马上返回,有消息返回消息,没消息返回空值, getmessage等待到有消息的时候才返回, 区别二: peekmessage可以根据参数决定是否将消息保留在队列中, PM_NOREMOVE:该参数指示保留消息 PM_REMOVE:该参数指示移去消息而getmessage获得消息后回把消息从消息队列中删去 例程: // GetMessage Damo int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR szCmdLine,                                  int iCmdShow) {         MSG   msg ;          while(GetMessage(&msg,NULL,0,0))          {                 TranslateMessage(&msg);                 DispatchMessage(&msg);         }         return TRUE ; } // PeekMessage() Damo int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR szCmdLine,                                  int iCmdShow) {         MSG   msg ;         while (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))         {             TranslateMessage (&msg) ;             DispatchMessage (&msg) ;         }         return TRUE ; }

WH_GETMESSAGE钩子

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值