2017-10-11 298 views
-3

我試圖如在下面的代碼中提到打印掛鉤過程GetMsgProc內的消息來調用GetMsgPrc:無法使用WH_GETMESSAGE鉤

LRESULT WINAPI GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam) 
{ 
    printf("inside hook proc"); 

    return CallNextHookEx(getmsghook, nCode, wParam, lParam); 
} 


void main() 
{ 
    HINSTANCE hins; 
    hins = GetModuleHandle(NULL); 
    getmsghook = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC) GetMsgProc, hins, 0); 

    MSG message; 
    while (GetMessage(&message, NULL, 0, 0)) 
    { 
     TranslateMessage(&message); 
     DispatchMessage(&message); 
    } 

    UnhookWindowsHookEx(getmsghook); 
} 

// ---------- -------------------------------------------------

我的猜測是,對於每個鍵盤或鼠標輸入,應該打印該消息。但我無法弄清楚爲什麼沒有發生。能否請你幫忙。

+0

如果我沒有記錯,該鉤子只捕獲窗口句柄中的_sent_消息。 –

+0

@ 500-InternalServerError:不一定。如果我用WH_MOUSE_LL替換WH_GETMESSSAGE,它會起作用。 – Roger1990

+0

@ 500-InternalServerError。 'WH_GETMESSAGE'捕獲通過'(Peek | Get)Message()'傳遞的任何消息,無論它是發佈,發送,廣播等。你可能會想'WH_CALLWNDPROC/RET',它捕獲所有發送的消息到一個窗口。 –

回答

1

全局鉤子必須在.DLL中實現,唯一的例外是低鍵盤鍵盤和鼠標鉤子。檢查返回值SetWindowsHookEx,它可能是NULL。