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

Jas*_*n A 4 c# sendkeys minecraft

我正在尝试将键盘输入发送到 Minecraft 以移动播放器,但是当我尝试使用时SendKeys.SendWait("W");什么也没有发生。如果我在 Minecraft 中打开聊天,它会在聊天中输入“W”,但是在聊天之外我的输入似乎被忽略了。谢谢。

编辑:我试过使用SendInput以及InputSimulator两者都具有相同的效果。

Ste*_*eve 5

基本上Windows有三个保护环。通过这样做,SendKeys您正在向应用程序发送 ring 3 命令。然而,DirectX 只侦听 ring 0 和 ring 1(可能是 ring 2)命令以减少由命令通过驱动程序传递到应用程序引起的部分延迟。

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

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


Jas*_*n A 5

我通过使用 InputSimulatorPlus 解决了它

https://github.com/TCatzigiannakis/InputSimulatorPlus

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

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