0

我想知道就效率(cpu/内存使用)而言,暂时挂起/绕过低级鼠标/键盘挂钩的最佳方法是什么。

我找到的当前解决方案是在示例中设置一个全局变量“doHook”,在钩子过程中对其进行测试,如果没有设置,就让它像这样通过 CallNextHookEx 传递:

    if ((nCode < 0) || (!doHook))
    {
        return CallNextHookEx(NULL, nCode, wParam, lParam);
    }

这是一个好的解决方案吗?更好的方法?

谢谢

4

1 回答 1

2

您有 2 个选项:

  • 通过调用完全删除钩子UnhookWindowsHookEx
  • 将挂钩留在原位并跳过正常操作。

低级的键盘鼠标钩子有些昂贵,因为它们引入了额外的上下文切换来处理输入事件:

[...] 钩子没有注入到另一个进程中。相反,上下文切换回安装钩子的进程,并在其原始上下文中调用它。然后上下文切换回生成事件的应用程序。

本质上,对于所有输入事件,您的无操作挂钩仍会占用数千个时钟周期来进行上下文切换。为了最大限度地减少整体影响,您应该考虑完全卸载挂钩并在必要时重新安装它。

于 2014-01-26T11:33:01.090 回答