2015-01-13 134 views
1

我想創建一個簡單的鼠標鉤來檢測鼠標是否正在移動,但由於某種原因,當我運行該程序時,鼠標根本不起作用,直到我停止該過程。MouseHook檢測鼠標移動

這裏是我的代碼:

#include <windows.h> 

HHOOK g_hMouse; 

LRESULT CALLBACK MouseHook(int nCode, WPARAM wParam, LPARAM lParam) 
{ 
    printf("MOUSE EVENT!\n"); 

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

int main() 
{ 
    g_hMouse = SetWindowsHookEx(WH_MOUSE_LL, MouseHook, NULL, NULL); 

    while (1) { 
     Sleep(2); 
    } 

    return 0; 
} 

任何幫助,將不勝感激。

謝謝。

+0

得到它與BrendanMcK的幫助。 – Pat

回答

3

WM_MOUSE_LL掛鉤要求安裝它的線程保持泵送消息;所以你需要一個GetMessage/DispatchMessage循環。有關詳細信息,請參閱以下MSDN文檔:WM_MOUSE_LL

此鉤子在安裝它的線程的上下文中調用。該調用是通過向安裝該鉤子的線程發送消息來完成的。因此,安裝該鉤子的線程必須有一個消息循環。

如果你只是想嘗試一些快速實驗時/調試,具有MessageBox(...)通話,這將阻止您的代碼,這樣你就可以做測試代替你的睡眠(),但它運行它自己的消息循環,所以掛鉤將運行。

+0

哦,有道理。謝謝! – Pat

+2

更安全的選擇是停止使用'SetWindowsHookEx()'並使用'RegisterRawInputDevices()'代替。然後,您的應用程序將收到WM_INPUT窗口消息,而不影響其他線程/進程。 –