1. 程式人生 > >GetMessage與PeekMessage的區別及其在WH_GETMESSAGE鉤子中的不同表現

GetMessage與PeekMessage的區別及其在WH_GETMESSAGE鉤子中的不同表現

區別一: 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被呼叫