收藏:低级钩子失灵原因,有时用着用着就失灵了

关于低级钩子失灵原因:

https://blog.csdn.net/matrix_designer/article/details/5893669

Windows要求低级钩子必须在限定的时间内完成,如果超时系统就会自动调用钩子链的下一个函数。这个超时值是由HKEY_CURRENT_USER/Control Panel/Desktop下的键LowLevelHooksTimeout决定的。如果没有这个键,系统在一次超时后就会自动卸载钩子,以后钩子函数就再也得不到执行。默认情况下,XP有这个键,其值为5000(五秒钟);Vista和Win7都没有这个键,因而一旦超时钩子就会被卸载。

--------------------------------------------------------------------------------

 我测试过,如果在钩子回调函数(比如:keyboardHook())中调用了一段比较耗时的代码后,就算设置了 LowLevelHooksTimeout 可能也没用。

我的解决办法:

把耗时的代码放在另一个线程中去完成,可能需要队列模式,比如在 keyboardHook() 中把耗时的代码放到另一个线程的处理队列中,随后马上返回 --> return CallNextHookEx(...)

这样低级钩子才不会出现用着用着就失灵了现象。

 

posted @ 2020-08-11 11:57  personnel  阅读(892)  评论(0编辑  收藏  举报
友情链接:图片批量处理工具 gif动态图制作工具 制作电子相册 图片排版工具 制作淘宝主图视频 MKScript 鼠标键盘自动化脚本语言