我使用SetWindowsHookEx
和WH_KEYBOARD_LL
以多种语言(AutoIt,C#)实现了键盘挂钩。我也知道有几个C ++程序存在同样的问题。
我没有发布任何代码,因为它们在Windows XP中完美运行。但是,在Windows 7下,钩子会在某些时候“卸载”或停止处理任何其他键。看起来它可能与低内存条件有关,但我不太确定。
微软是否改变了键盘挂钩在Vista或7中的工作方式,以添加一些可以在某些情况下卸载第三方挂钩的逻辑?
相关问题:
答案 0 :(得分:3)
当UAC在Vista中实施时,它已被大量修补。然而,这不是一个常见的抱怨。是的,Windows很可能会停止回调挂钩回调。内置功能,可防止操作系统在有一个不及时处理回调的挂钩时无响应。它会自动从回调列表中删除,无需任何诊断。
这是基于超时的,当操作系统开始在资源上运行不足时,确实会跳闸。就像没有足够的RAM和运行大量进程一样,获得大量的分页。对于Windows的更高版本更有可能,因为它们需要更多的RAM,并且由于磁盘碎片问题(尤其是分页文件)而导致机器升级而不是在安装之前擦除时会受到影响。
可以通过添加HKCU \ Control Panel \ Desktop \ LowLevelHooksTimeout值(DWORD,比如10000)来调整超时设置。在superuser.com上提出更多相关问题
答案 1 :(得分:1)
我遇到了你在前几天编写我自己的键盘钩子时描述的相同超时问题。为了解决这个问题,我编写了我的hookcallback proc,以便它异步调用一个按键事件并立即返回。
Here's a link to my code,如果您有兴趣的话。