使用 C# 模拟键盘

Posted

技术标签:

【中文标题】使用 C# 模拟键盘【英文标题】:Keyboard emulation with C# 【发布时间】:2015-10-25 20:38:44 【问题描述】:

我正在开发一个 C# 应用程序,它使用户能够设置一些特定的击键,当应用程序在执行中启动时,这些击键将重现。就我在记事本或其他简单程序中测试我的应用程序而言,它仅使用SendInputInputSimulator 即可工作,但是一旦我用视频游戏尝试它,游戏就无法接收模拟输入。 奇怪的是,实际上输入是由游戏接收的,但前提是我正在使用游戏聊天。

为了更清楚,我举个例子: 我在我的应用程序中设置了重现密钥 w。 我启动我的应用程序,然后启动像 CounterStrike 这样的 FPS 游戏。 当应用程序模拟按下 w 键时,我在游戏中的角色不会移动!但是,如果我点击聊天并尝试在聊天框中写一些东西,模拟的输入就会被识别,我可以看到"w"s 被写在聊天框中。

【问题讨论】:

尝试其他游戏。 Valve 非常小心,不允许玩家作弊 :) 欢迎来到 ***。我们是问答网站而不是论坛,因此我编辑了您的问题以删除“健谈”部分。随意查看网站的Help Center 或How-to Ask 部分以了解有关 SO 的更多信息。 非常感谢你们! 【参考方案1】:

游戏引擎通常不会从常用的 Windows API 获取输入;因为这个让你一次只能读取一个字符。但是,在游戏中,您可以同时按下多个键。例如,您可以同时按下 wa 以使角色向前左移动。游戏在每个游戏循环中检查键盘状态,而不是读取已键入的字符。字符“w”可能只输入了一次,但 w 键可能在 8 个循环期间处于按下状态。游戏引擎似乎通过低级函数访问键盘。这就是为什么像 SendKeys 这样的命令在更高级别注入他们的击键没有效果。

【讨论】:

非常感谢您的回复!据你所知,有什么办法可以克服这种问题吗? 我确信存在一种方法来实现我正在尝试做的事情,因为有一个名为 GlovePie 的软件可以模拟键盘输入并且它也适用于视频游戏!我只是无法理解它是如何工作的!

以上是关于使用 C# 模拟键盘的主要内容,如果未能解决你的问题,请参考以下文章

.NET(C#) SendKeys模拟键盘按键不生效使用WinAPI的替代方案

C# 模拟键盘操作SendKey(),SendKeys() / C# SendKeys用法

C# 模拟Windows键盘消息

用C#语言在浏览器中模拟键盘输入和鼠标点击

C# winform 模拟键盘输入自动接入访问网络

vba模拟键盘操作?