zoukankan      html  css  js  c++  java
  • 收藏:低级钩子失灵原因,有时用着用着就失灵了

    关于低级钩子失灵原因:

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

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

  • 相关阅读:
    Hibernate 中 get()和load()的区别
    Socket网络编程
    经典
    jsp的九大内置对象及EL表达式的隐含对象
    TreeSet
    centos7.4安装npm
    centos7.4中安装docker
    centos7安装nginx
    centos中安装基础环境
    在docker中安装mysql
  • 原文地址:https://www.cnblogs.com/personnel/p/13474717.html
Copyright © 2011-2022 走看看