MS是否改变了Windows Vista或7中的键盘挂钩?

时间:2010-10-08 14:54:25

标签: winapi language-agnostic hook keyboard-hook

我使用SetWindowsHookExWH_KEYBOARD_LL以多种语言(AutoIt,C#)实现了键盘挂钩。我也知道有几个C ++程序存在同样的问题。

我没有发布任何代码,因为它们在Windows XP中完美运行。但是,在Windows 7下,钩子会在某些时候“卸载”或停止处理任何其他键。看起来它可能与低内存条件有关,但我不太确定。

微软是否改变了键盘挂钩在Vista或7中的工作方式,以添加一些可以在某些情况下卸载第三方挂钩的逻辑?


相关问题:

how to restart a mouse hook?
Detecting Keyboard Hooks

2 个答案:

答案 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,如果您有兴趣的话。