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

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

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

【问题讨论】:

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

标签: c# wpf sendkeys virtual-keyboard sendinput


【解决方案1】:

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

【讨论】:

  • 非常感谢您的回复!据你所知,有什么办法可以克服这种问题吗?
  • 我确信存在一种方法来实现我正在尝试做的事情,因为有一个名为 GlovePie 的软件可以模拟键盘输入并且它也适用于视频游戏!我只是无法理解它是如何工作的!
猜你喜欢
  • 2011-09-18
  • 1970-01-01
  • 2018-08-15
  • 2016-07-04
  • 2011-09-17
  • 2013-12-27
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多