2014-09-25 23 views
0

我使用下面的代碼來設置鼠標本地鉤:設置兩個鼠標鉤在兩個線程

//declare hook handle global variable: 
static HHOOK hhk; 
//set new hook: 
hhk = SetWindowsHookEx(WH_MOUSE, (HOOKPROC)MouseWndProc, GetModuleHandle(NULL), GetCurrentThreadId()); 

這裏是mouseproc回調函數的代碼:上面的代碼我設置使用所描述

LRESULT CALLBACK MouseWndProc(int nCode, WPARAM wParam, LPARAM lParam) 
{ 
MOUSEHOOKSTRUCT *pMouseStruct = (MOUSEHOOKSTRUCT*)lParam; 

    if(nCode < 0) 
    { 
    return CallNextHookEx(hhk, nCode, wParam, lParam); 
    } 

    //do something... 

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

第一個線程中的本地鉤子。 在第二個線程中,我也需要設置新的本地鉤子。問題是 - 當我設置新鉤子(對於第二個線程)時,全局變量hhk將被覆蓋。第一個鉤子的mouseproc現在使用錯誤的鉤子手柄。對? 那麼我必須作爲CallNextHookEx()函數的第一個參數傳遞什麼?

+2

所以使用兩個變量。 – 2014-09-25 05:56:39

+0

在這種情況下,mouseproc函數如何確定其變量? – 2014-09-25 06:10:43

+0

爲什麼在調用'SetWindowsHookEx'時將'MouseWndProc'強制轉換爲'HOOKPROC'? – 2014-09-25 06:19:29

回答

2

你不需要知道,因爲CallNextHookEx鉤proc中的HHOOK值忽略第一個參數(所以你可以通過NULL的第一個參數)。

您需要分別保存兩個手柄,以便稍後可以用UnhookWindowsHookEx刪除兩個掛鉤。

+0

喬納森,謝謝! – 2014-09-25 06:30:08