C#将按键输入发送到Minecraft以移动玩家

4
我正在尝试发送键盘输入到Minecraft以移动玩家,但是当我尝试使用SendKeys.SendWait("W");时没有任何反应。如果我在Minecraft中打开聊天窗口,它会在聊天窗口中键入"W",但在聊天窗口之外,我的输入似乎被忽略了。谢谢。
编辑:我已经尝试使用SendInputInputSimulator,但效果相同。

1
很可能是因为DirectX不支持传递窗口消息...尝试使用https://archive.codeplex.com/?p=inputsimulator或查看SendInput。 - SSpoke
可能相关:https://dev59.com/n5Hea4cB1Zd3GeqPmTuc。 - chadnt
1
@SSpoke 感谢您的回复,但是使用InputSimulator.Keyboard.KeyPress似乎我仍然遇到了同样的问题。 - Jason A
2个回答

7
基本上,Windows 有三个保护环。通过执行SendKeys,您正在向应用程序发送一个环 3 命令。然而,DirectX 只监听环 0 和环 1(可能是环 2)的命令,以减少通过驱动程序传递到应用程序的命令所引起的延迟。
因此,为了使 DirectX 游戏对您发送的事件做出反应,您必须在驱动程序级别发送它。您可以通过使用扫描码(不要使用虚拟码)调用 WINDOWS api SendInput 来模拟环 2 驱动程序输入。
如果扫描码不起作用,则游戏可能会阻止环 2 命令以防止黑客攻击。在这种情况下,您需要编写一个驱动程序+虚拟硬件来直接发送环 1 命令。(如果没有经验,请不要尝试此操作。如果犯错可能会导致蓝屏甚至损坏系统)。

6

我使用InputSimulatorPlus解决了这个问题。

https://github.com/TChatzigiannakis/InputSimulatorPlus

InputSimulator s = new InputSimulator(); s.Keyboard.KeyDown(VirtualKeyCode.VK_W);

这仅仅是向前运行,要停止使用s.Keyboard.KeyUp(VirtualKeyCode.VK_W); 您也可以使用s.Keyboard.KeyPress(VirtualKeyCode.VK_W);,这只会单击"W"键。


运行得非常好,包括鼠标事件。如果你将两者结合起来,你可以做一些相当疯狂的事情。这比在空格键上放砖块或建造一个乐高机器来进行一些原始的按键/点击要高级得多。 - Konstantin Konstantinov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接