wzs5wzs
wzs5wzs
2016-11-20 14:05
采纳率: 100%
浏览 1.0k
已采纳

关于鼠标全局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;
}
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • wzs5wzs
    wzs5wzs 2016-11-20 14:35
    已采纳

    问题已解决,原来需要使用低层钩子:WH-MOUSE-LL

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

    注:没办法使用下划线,就用“-”代替。

    点赞 评论

相关推荐