gpt4 book ai didi

c++ - SetWindowsHookEx 在快速输入或键盘按钮按住时卡住

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:43:15 26 4
gpt4 key购买 nike

我的键盘记录器有问题。直到今天,每个经过测试的系统都运行良好,除了 Windows 7 Embedded Standard 32 位,它显然与当前版本不符。

我需要做的是记录从键盘输入的按键,直到我得到一定数量的按键。当我这样做时,我会调用某个过程。

我有一个这样定义的钩子(Hook):

SetWindowsHookEx(WH_KEYBOARD_LL, keyboardProcedure, GetModuleHandle(NULL), 0);

和一个 keyboardProcedure 回调:

LRESULT CALLBACK SystemKeyboardReadWrite::keyboardProcedure(int nCode, WPARAM wParam, LPARAM lParam)
{
...
}

我为此应用程序使用 Qt 5.2。

因此,更深入地讲,当您输入按键太快或按住某个键的时间较长时,就会出现问题,这将迫使键盘发送多个键盘事件。发生这种情况时, Hook 将卡住并且不再向回调发送任何事件。 (不是整个应用程序,应用程序仍将继续运行,但键盘记录器除外)

此问题仅出现在此操作系统上,我没有注意到其他 Windows 7 操作系统或 Windows XP 上的问题。我有两台设置相同的计算机,它们都显示相同的问题,而且我正在 Windows 7 专业版上开发该应用程序,它看起来也不错。我想知道这是我的应用程序的问题,还是我无法控制的问题。

感谢大家的帮助。

最佳答案

我不了解 Windows Embedded,但我熟悉 Windows 7 和 LowLevel Hooks,包括鼠标和键盘。

可以使用 LowLevelHooksTimeOut 注册表值减少/修改被踢出 Hook 列表的症状。修改后必须重启系统。基本上,该值表示 Hook 必须与键交互的毫秒数。

如果您也从 hook 方法内部写入文件,那么超时也可能是准确的时间。

例如,您得到 100 次击键,然后将其写入文件。如果他们按住 100 到 101+ 之间的键,并且您使用 Hook 的时间超过了最长时间,那么 Windows 会将您的 Hook 回调列入黑名单并将您踢出 Hook 列表。

我认为 Windows 7(桌面)的默认时间是 200 毫秒。对于嵌入式,如果它更少,我不会感到惊讶。此外,当多个程序都挂接键盘时,它会影响允许挂接访问键盘的时间。

我也只真正使用过在 dll 中建立的 Hook ,并保持全局 HHOOK 句柄。查看您的函数的所有返回码也可以对情况有所了解。

关于 LowLevelHooksTimeout 的更多信息:

Low level Keyboard Hook works on one on Windows 7 x64 and not another

关于c++ - SetWindowsHookEx 在快速输入或键盘按钮按住时卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25450168/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com