我想知道在效率(CPU /内存使用)方面,暂时挂起/绕过低级鼠标/键盘挂钩的最佳方法是什么。
我发现的当前解决方案是在示例中设置一个全局变量“ doHook”,在hook proc中对其进行测试,如果未设置,则将其通过CallNextHookEx传递,如下所示:
if ((nCode < 0) || (!doHook))
{
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
这是一个好的解决方案吗?更好的方法?
谢谢
最佳答案
您有2个选择:
通过调用UnhookWindowsHookEx
完全删除该挂钩。
将挂钩留在原处,并跳过正常操作。
低级keyboard和mouse挂钩有些昂贵,因为它们引入了附加的上下文开关来处理输入事件:
钩子没有注入到另一个进程中。取而代之的是,上下文切换回安装挂钩的过程,并在其原始上下文中对其进行调用。然后,上下文切换回生成事件的应用程序。
从本质上讲,对于所有输入事件,无所事事的钩子仍会占用数千个时钟周期进行上下文切换。为了最大程度地降低总体影响,您应该考虑完全卸载该挂钩,并在必要时重新安装它。
关于c++ - 挂起低级钩子(Hook)的最佳方法(WinAPI),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21353266/