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

关于鼠标全局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 2016-11-20 14:35
    关注

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

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 有人懂怎么做大模型的客服系统吗?卡住了卡住了
  • ¥20 firefly-rk3399上启动卡住了
  • ¥15 如何删除这个虚拟音频
  • ¥50 hyper默认的default switch
  • ¥15 网站打不开,提示502 Bad Gateway
  • ¥20 基于MATLAB的绝热压缩空气储能系统代码咨询
  • ¥15 R语言建立随机森林模型出现的问题
  • ¥15 关于#wpf#的问题:怎么更改LayoutGroup组件的标签页的字体颜色
  • ¥15 中级微观经济学,生产可能性边界问题
  • ¥15 TCP传输时不同网卡传输用时差异过大