我想在键盘上触发 Keypress。在物理键盘上 - 因此它必须以该特定键盘作为其源来遍历所有内核过滤器。这样的事情可能吗?
我查看了 DeviceIOCtrl 和 IOCTL_KEYBOARD_INSERT_DATA,但没有找到文档。有人说,它没有在驱动程序中实现。另一个来源尝试使用 IOCTL_INTERNAL_I8042_KEYBOARD_WRITE_BUFFER,但也说,它可能不适用于那种东西。
在键盘通过内核过滤器之前,是否有其他选项可以触发键盘上的按键?
为什么我什至想这样做? 是的,这可能是一个 XY 问题,但它是我目前能想到的唯一解决方案。我只想截取来自特定键盘的键。有 RawInput,它告诉我击键的键盘,但无法拦截,还有一个 LowLevel Keyboard 钩子可以拦截,但无法识别键盘。更糟糕的是,RawInput在 LowLevel-Hook之后触发,因此在截取击键之前无法获取键盘。有一些神奇的独角兽方式可以使用在 RawInput 之后触发的全局 Hook,但处理所有边缘情况看起来很痛苦。
有一个API可以拦截我选择的键盘敲击。它基本上安装了一个允许拦截击键和获取键盘ID。但是:该 ID 有点随意,并且不遵循我可以用来将整数值与特定键盘设备相关联的任何规则。例如,重新插入设备时它会发生变化,与 \Device\KeyboardClassX 等无关。因此,每次重新连接键盘/启动应用程序时,用户都必须主动按下一个键,以便我可以确定哪个物理键盘的 id实际上代表。我想避免这种情况并自动获取特定设备的 ID。我的想法是触发键盘(-控制器?)中的按键并使用驱动程序捕获它,从而将任意 ID 与设备相关联。
因此,如果我的 Y 有不同的 X,请随时提出建议。我想避免所有那些RawInput 和 GlobalHook 的 Magic Unicorn Way不能可靠工作的边缘情况。任何主要语言的示例都可以。也许没有办法解决在应用程序启动时手动按下按钮来识别键盘的 UX 不便......