gpt4 book ai didi

windows - 具有延迟的全局键盘 Hook

转载 作者:可可西里 更新时间:2023-11-01 10:07:35 24 4
gpt4 key购买 nike

我正在为条形码扫描仪制作“驱动程序”。

这个特定的扫描仪基本上是一个 USB 键盘,只要扫描到某些东西就会生成击键。

我想找到一种方法来区分这些击键和正确键盘发送的那些击键。不幸的是,唯一的区别是扫描仪生成击键的速度真的很快,在几分之一秒内完成了一系列的按键操作。

我的看法是,我必须设置一个全局键盘钩子(Hook)来拦截所有输入,以某种方式存储它,稍等片刻,然后将这些击键发送到钩子(Hook)链的更下方,或者假设它们是扫描仪生成的并适本地处理它们。

但是,由于之前没有使用钩子(Hook)的经验,我不确定正确的方法。我可以只调用 CallNextHookEx() 中的某些方法而不是其他线程中的 KeyboardProc() 来传递延迟的击键事件吗?或者我应该手动生成一个新的 WM_KEYPRESS 消息?也许有更好的方法来解决这个问题?

谢谢。

最佳答案

好的,这是我的解决方案,以防有人遇到类似问题。

首先,使用 WH_KEYBOARD_LL 钩子(Hook)代替 WH_KEYBOARD

其次,使用 SendInput() API 函数将不需要的击键传递到事件窗口。

第三,低级键盘钩子(Hook)的回调函数有一个指向KBDLLHOOKSTRUCT的指针作为参数之一;在其 flags 位域中使用 LLKHF_INJECTED 位来区分真正的击键与您刚刚生成的击键。如果您多疑并且担心其他人可能会使用同样的把戏,请使用结构的 dwExtraInfo 成员 SendInput() 和 Hook 回调用于区分注入(inject)的击键由您自己和其他人。

第四,请注意,如果处理输入的时间过长,Windows 7 往往会悄悄地取消 Hook 低级 Hook ,因此要么保持 Hook 回调尽可能简单,并确保尽可能频繁地抽取 Windows 消息队列尽可能在钩住钩子(Hook)的线上;或者 - 如果你是个坏 child - HKCU\Control Panel\Desktop\[DWORD]LowLevelHooksTimeout 有一个注册表项,将它设置为一个相当大的值也可能有效。

关于windows - 具有延迟的全局键盘 Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12915734/

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