HHOOK SetWindowsHookEx(
int idHook, // 鉤子的類型,即它處理的訊息類型
HOOKPROC lpfn, // 鉤子子程的地址指標。如果dwThreadId參數為0
// 或是一個由別的進程建立的線程的標識,
// lpfn必須指向DLL中的鉤子子程。
// 除此以外,lpfn可以指向當前進程的一段鉤子子程代碼。
// 鉤子函數的入口地址,當鉤子鉤到任何訊息後便調用這個函數。
HINSTANCE hMod, // 應用程式執行個體的控制代碼。標識包含lpfn所指的子程的
DLL。
// 如果dwThreadId 標識當前進程建立的一個線程,
// 而且子程代碼位於當前進程,hMod必須為NULL。
// 可以很簡單的設定其為本應用程式的執行個體控制代碼。
DWORD dwThreadId // 與安裝的鉤子子程相關聯的線程的標識符。
// 如果為0,鉤子子程與所有的線程關聯,即為全域鉤子。
);
函數成功則返回鉤子子程的控制代碼,失敗返回NULL
- HHOOK glhHook=NULL; //定義為全域變數
- DWORD lastTime; //定義為全域變數
- BOOL lastIsRight=FALSE; //定義為全域變數
- HINSTANCE glhInstance=NULL;
- glhInstance=GetModuleHandle(NULL);
- glhHook=SetWindowsHookEx(WH_MOUSE_LL,MouseProc,glhInstance,0);
- //WH_MOUSE_LL指監控滑鼠行為,MouseProc是回呼函數
- LRESULT CALLBACK MouseProc(int nCode,WPARAM wparam,LPARAM lparam)
- {
- if (nCode>=0)
- {
- if(wparam==WM_RBUTTONUP)
- {
- if(lastIsRight==FALSE)
- {
- lastTime=::GetTickCount();
- lastIsRight=TRUE;
- }
- else
- {
- DWORD nowTime=::GetTickCount();
- if(nowTime-lastTime<350)//時間間隔為350ms
- {
- AfxMessageBox("雙擊了滑鼠右鍵");
- lastIsRight=FALSE;
- }
- else
- lastTime=nowTime;
-
- }
-
- }
- }
- return CallNextHookEx(glhHook,nCode,wparam,lparam);
-
- }
在網上看到的都是用wparam==WM_RBUTTONDBLCLK來判斷,但不知是不是我的做法有問題,監控不到,所有用時間間隔來判斷