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 一道python难题2
  • ¥15 一道python难题
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备