问题:本来要编写一个获取系统空闲时间的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;
}
}