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