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

我发现的当前解决方案是在示例中设置一个全局变量“ doHook”,在hook proc中对其进行测试,如果未设置,则将其通过CallNextHookEx传递,如下所示:

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


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

谢谢

最佳答案

您有2个选择:


通过调用UnhookWindowsHookEx完全删除该挂钩。
将挂钩留在原处,并跳过正常操作。


低级keyboardmouse挂钩有些昂贵,因为它们引入了附加的上下文开关来处理输入事件:


  钩子没有注入到另一个进程中。取而代之的是,上下文切换回安装挂钩的过程,并在其原始上下文中对其进行调用。然后,上下文切换回生成事件的应用程序。


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

关于c++ - 挂起低级钩子(Hook)的最佳方法(WinAPI),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21353266/

10-10 14:25