【问题标题】:A general solution to injecting keys to different applications on windows?将密钥注入 Windows 上不同应用程序的通用解决方案?
【发布时间】:2021-09-13 00:36:29
【问题描述】:

在收到有关此问题的一些反馈:How to create lParam for WM_CHAR or WM_KEYUP/WM_KEYDOWN? 后,我开始为通用解决方案寻找更广泛的答案。有一件事我意识到使用 Windows API 可能不适用于每个应用程序和每种情况。

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

但这又引发了另一个想法,一个硬件增强的小数字键盘,它也由 Arduino 操作,通过另一个 USB 控制。这至少有点用 - 但仍然不是很好。

然后我尝试使用 Digispark Atiny85 微控制器,而后者又使用了 Digikeyboard 库。这个解决方案要好得多 - 但是必须在你的 USB 端口中插入一个 digispark 有点令人沮丧。

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

那么这个任务真的可以通过编写内核驱动来完成吗?可以用其他任何方式完成吗?无论哪种情况,您都可以就该主题给我一些建议吗?

【问题讨论】:

    标签: windows hid


    【解决方案1】:

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

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

    如果你想控制一个特定的应用程序,你应该使用UI Automation

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-29
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-02
      • 1970-01-01
      相关资源
      最近更新 更多