C# 向 Minecraft 发送关键输入以移动玩家

C# Send key inputs to Minecraft to move the player

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

编辑:我试过使用 SendInputInputSimulator 都具有相同的效果。

基本上Windows有3个protection ring。通过执行 SendKeys,您将向应用程序发送 ring 3 命令。然而,DirectX 仅侦听 ring 0 和 ring 1(可能是 ring 2)命令,以减少由命令通过驱动程序传递到应用程序引起的小数延迟。

因此,为了使 DirectX 游戏对您发送的事件做出反应,您必须在驱动程序级别发送它。您可以通过 pinvoke WINDOWS api SendInput 和扫描码(不要使用虚拟代码)来模拟 ring 2 驱动程序输入。

如果扫描码不起作用,则游戏可能出于反黑客目的阻止了 ring 2 命令。在那种情况下,您需要编写一个驱动程序 + 一个虚拟硬件来直接发送 ring 1 命令。 (没有经验的请勿尝试,一不小心就会蓝屏甚至死机)

我用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" 键即可。