在硬件级别模拟按键 - Windows

Posted

技术标签:

【中文标题】在硬件级别模拟按键 - Windows【英文标题】:Simulate Key Press at hardware level - Windows 【发布时间】:2012-07-20 19:47:37 【问题描述】:

我正在寻找一种语言或库,以允许我尽可能地模拟击键,而无需实际按下键。

(我对击键级别的具体衡量标准是,当我的计算机已经在运行按键侦听器(例如 MouseKeys 和 StickyKeys)时,它是否会产生与物理按键相同的输出。

我尝试了很多按键模拟的方法; java AWT 库、Java win32api、python win32com sendKeys、python ctypes Key press 以及更多用于 python 和 Java 的库,但它们都没有在与实际硬件足够接近的水平上模拟击键。 (当 Windows 鼠标键处于活动状态时,发送冒号、分号或数字键盘的键击只会产生这些字符,而物理按下则执行鼠标键单击)

我相信此类方法必须涉及将笔画直接发送到应用程序,而不是仅将它们传递给操作系统。

我的想法是,这些高级(高于操作系统代码)语言的库不会产生足够的东西。我担心我可能不得不屈服于某种 Bios 编程。

有人对此事有任何有用的信息吗? 我将如何模拟低级语言的按键操作? 我应该寻找我的硬件专用解决方案(某种富士通硬件 API)吗?

我几乎觉得将机器人编程为简单地坐在硬件旁边并按下按键会更容易。

谢谢!

【问题讨论】:

这个神圣任务背后的动机是什么? 由于这带来了极大的困难,目前它是一个有趣和实验的问题。然而,我的任务开始了,作为一种自定义 Windows MouseKeys 控制键的方法,以便它们可以在平板电脑(我使用的)上使用,同时保留使用标准布局丢失的键(最终,作为合法的鼠标快捷键对于流行的 MMORPG)。 我想知道您是否需要在键盘和 CPU 之间生产某种硬件加密狗,可能作为键盘电缆的一部分,并生成由某些软件驱动程序驱动的类似硬件的按键.虽然我确信这样的事情是可能的,但我也知道我没有足够的资金来创造它,不是现在,也不是一百万年后。这就是为什么在我看来这似乎是一个圣杯任务。如果您找到解决方案,请告诉我。另一方面,如果你发现了炭疽城堡,也请告诉我!!! 这听起来特别困难,因为我的键盘在我的平板电脑中是分开的。插入外部键盘可以解决我一半的问题。我会及时通知你:) >"这个神圣任务背后的动机是什么?"使用 DirectInput 的 Windows DirectX 应用程序;注入击键的唯一方法是修改低级驱动程序链。模拟 HID 输入并可由应用程序寻址的硬件设备将是一个很好的解决方案。 【参考方案1】:

第二个解决方案,超级复杂,大量虚拟化,恶魔般的,完全未经测试,但理论上应该可以工作,除非 datasnip 程序实际上并没有写入键盘缓冲区,而是像你一直在尝试那样模拟击键。那会很糟糕,而且我会发现对他们产品的描述具有高度误导性。

你需要:

http://www.priority1design.com.au/datasnip.html http://sourceforge.net/projects/com0com/

还有一些写入 com 端口的知识...其中,看起来这里有一个很好的 python 模块:http://pyserial.sourceforge.net/

首先,编写一个小程序,根据需要将字符、十六进制代码等发送到您选择的 COM 端口。其次,使用 com0com 创建一个虚拟 COM 端口对。此时,将您的程序连接到创建的 COM 端口之一,并将 datasnip 连接到另一个,确保通信双方使用相同的波特率、奇偶校验和停止位以及数据长度参数。

就操作系统而言,此时您应该拥有一个与硬件相同的键盘。

【讨论】:

我又惊又喜。我会试一试 :) 谢谢! 经过大量研究/努力,我不知道如何将击键发送到特定的 COM 端口。 :|【参考方案2】:

我使用了这个解决方案http://oblita.com/interception.html 它完全满足我的需求(发送击键直接输入游戏)

【讨论】:

【参考方案3】:

您可以使用 MSDN 语言吗?它们相当简单且有据可查(谷歌搜索通常比 msdn 网站更好,用于导航)

我发现了这一点,我无法告诉你它是否在足够接近硬件的水平上模拟击键,但它似乎确实能够生成其他程序可以识别的击键事件,这就是你的终极目标目标是。

http://msdn.microsoft.com/en-us/library/ms171548.aspx

“Send”和“SendWait”方法似乎是关键。

http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.sendwait.aspx

神速。

【讨论】:

嗯,这些方法似乎也将击键发送到活动应用程序。我希望 MouseKeys 是一个能够接收它们的应用程序 :( 有 MSDN 经验的人可以对此进行测试,以节省我为可能不会产生任何东西的东西学习几种新语言吗? 编写自己的 MouseKeys 应用程序可能会更好...您当然可以使用 C#!(social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/…) 移动鼠标并使用其他库模拟鼠标和键盘事件...。 Tbh,在这个 MMORPG 中自动使用鼠标的方法被认为是“botting”(并且是非法的),不包括使用 Windows 鼠标键。因此,输出必须是鼠标键的翻译。但是非常明智的建议。 我发布了另一个解决方案,与第一个完全不同。希望这两个帖子至少能激发思想!【参考方案4】:

我没有在 Windows 机器上测试鼠标键,所以不能保证它会起作用,但你试过 AutoHotkey 吗?

【讨论】:

AutoHotKey 在使用 MouseKeys 时未检测到任何按键;在 AutoHotKey 可以获取它们之前,击键被 MouseKeys 转换为其他输入。运行 AutoHotKey 脚本来按下应该触发 MouseKeys 命令的键也不会触发它们。不过感谢您的建议。

以上是关于在硬件级别模拟按键 - Windows的主要内容,如果未能解决你的问题,请参考以下文章

按键精灵--设置模拟方式

ESP 保姆级教程 疯狂点灯篇 —— 案例:ESP8266 + LED + 按键(模拟按键控制电器设备开关)

ESP 保姆级教程 疯狂点灯篇 —— 案例:ESP8266 + LED + 按键 + PWM调整亮度(模拟按键控制灯亮度)

Android模拟按键

使用按键精灵自动输入游戏密码时提示密码错误,我试了saystring和keypress命令都不行,

虚拟机的四个级别