将密钥注入windows上不同应用程序的通用解决方案



在收到关于以下问题的反馈后:如何为WM_CHAR或WM_KEYUP/WM_KEYDOWN创建lParam?,我已经开始为一个普遍的解决方案寻找一个更广泛的答案。有一件事我意识到,使用windows API可能不适用于所有应用程序和任何情况。

我在后续研究中的第一步是制作一个Arduino驱动的伺服系统来按键(是的,这个概念太可怕了(。

但这引发了另一个想法,一个硬件增强的小型数字键盘,也由Arduino通过另一个usb控制。这至少在一定程度上是有用的,但仍然不是很有用。

然后我尝试使用Digispark Atiny85微控制器,该微控制器又使用了Digiqueboard库。这个解决方案要好得多,但需要在usb端口中插入一个digispark有点令人沮丧。

这让我很好奇,是否有办法只使用软件来模拟键盘或任何其他HID设备?一些简短的谷歌搜索让我找到了内核驱动程序和虚拟COM端口,但这对我来说似乎有点过头了。

那么,这个任务真的可以通过编写内核驱动程序来实现吗?可以用其他方式吗?无论哪种情况,你能就这个话题给我什么建议吗?

SendInput函数可用于生成键盘和鼠标输入。这个输入进入前台窗口,就像是由真正的硬件生成的一样(但低级钩子可以判断它是软件生成的(。它可能不允许您生成Ctrl+Alt+Delete,也不允许您控制UAC提示,但除此之外,它在大多数情况下应该足够好。编写一个驱动程序来克服这些限制通常是不值得的

如果特定的应用程序/窗口不是前台窗口,则没有通用的方法来生成输入。

如果你想控制一个特定的应用程序,你应该使用UI自动化。

使用PostMessage伪造按键向上/向下/字符消息并不罕见,但并不总是有效(应用程序可能使用RAW输入,输入与实际硬件不同步等(。如果您决定无论如何都要使用此方法,请确保将其发送到正确的窗口(以键盘为焦点的HWND,而不仅仅是顶级窗口(。使用Spy++工具查看消息,以确保它们指向正确的窗口。

相关内容

最新更新