程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> 系統空閒時間 hook-關於鼠標全局HOOK的問題

系統空閒時間 hook-關於鼠標全局HOOK的問題

編輯:編程解疑
關於鼠標全局HOOK的問題

問題:本來要編寫一個獲取系統空閒時間的DLL,但當安裝鼠標全局鉤子後,每當彈出窗口、或按下鍵盤win鍵、alt鍵等這些情況時,鼠標鉤子的(WM MOUSEMOVE)消息就會響應,這是經過多次測試才鎖定在這個消息上,非常奇怪這個情況,請大神們給予指導解惑

簡單列一下部分相關代碼:

// 全局變量
#pragma data_seg ("mkHook")
HHOOK g_hMyFreeMouse = NULL;
DWORD g_dFreeMouse = 0;
#pragma data_seg ()

// 設置鼠標鉤子
void SetMouseHook()

{

if (!g_hMyFreeMouse)
{
g_dFreeMouse=GetTickCount();
g_hMyFreeMouse = SetWindowsHookEx(WH_MOUSE, MouseProc, GetModuleHandle("mkHook"), NULL);
}
}

// 鼠標HOOK回調函數
LRESULT CALLBACK MouseProc(int code ,WPARAM wParam, LPARAM lParam)
{
if(wParam == WM_MOUSEMOVE)
{
g_dFreeMouse=GetTickCount(); // 這就是問題所在,沒有鼠標操作,也能執行這行代碼
}
return CallNextHookEx(g_hMyFreeMouse, code, wParam, lParam); // 繼續傳遞
}

// 卸載鼠標HOOK
void DestroyMouseHook()
{
if (g_hMyFreeMouse)
{
g_dFreeMouse=0;
UnhookWindowsHookEx(g_hMyFreeMouse);
g_hMyFreeMouse=NULL;
}
}

最佳回答:


問題已解決,原來需要使用低層鉤子:WH-MOUSE-LL

將:SetWindowsHookEx(WH-MOUSE, MouseProc, GetModuleHandle("mkHook"), NULL);
改為:SetWindowsHookEx(WH-MOUSE-LL, MouseProc, GetModuleHandle("mkHook"), NULL);

注:沒辦法使用下劃線,就用“-”代替。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved