关于低级钩子失灵原因:

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(...)

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

 

相关文章:

  • 2021-10-19
  • 2021-05-05
  • 2021-08-07
  • 2021-04-18
  • 2021-06-17
  • 2021-11-27
  • 2022-02-05
猜你喜欢
  • 2022-12-23
  • 2021-07-25
  • 2021-06-12
  • 2022-01-07
  • 2022-01-05
  • 2021-10-31
  • 2021-11-03
相关资源
相似解决方案