暂停低级钩子(Winapi)的最佳方法



我想知道什么是效率(CPU/内存使用)的最佳方法,以暂时暂停/绕过低级鼠标/键盘钩。

我发现的当前解决方案是在示例中设置一个全局var," dohook",在钩子proc中进行测试,如果不设置,请与callnexthookex这样通过:

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

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

谢谢

您有2个选项:

  • 通过调用UnhookWindowsHookEx
  • 完全删除钩子
  • 将钩子放置在适当的位置并跳过正常操作。

低级键盘和鼠标挂钩有些昂贵,因为它们引入了处理输入事件的其他上下文开关:

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

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

相关内容

最新更新