【问题标题】:C# Send key inputs to Minecraft to move the playerC# 向 Minecraft 发送按键输入以移动玩家
【发布时间】:2019-03-19 20:29:12
【问题描述】:

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

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

【问题讨论】:

标签: c# minecraft sendkeys


【解决方案1】:

基本上 Windows 有三个protection ring。通过执行SendKeys,您正在向应用程序发送响铃 3 命令。然而,DirectX 只侦听 ring 0 和 ring 1(可能是 ring 2)命令,以减少命令通过驱动程序传递到应用程序所导致的部分延迟。

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

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

【讨论】:

    【解决方案2】:

    我使用 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”键。

    【讨论】:

    • 用作魅力,包括鼠标事件。如果将两者结合起来,您可以做一些非常疯狂的事情。这比在空格键上放一块砖或建造一个乐高机器来做一些原始的按键/点击要先进得多。
    猜你喜欢
    • 1970-01-01
    • 2021-12-30
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多