在游标隐藏在游戏中时移动鼠标

时间:2019-09-13 12:33:41

标签: c# winforms

我当前正在创建一个非常小的应用程序,这使我无法在Minecraft服务器上被踢。它的工作方式是每x秒钟来回移动鼠标一次。 即使从技术上讲它可以正常工作,但是当我在Minecraft中时,它也不会移动我的鼠标。如果光标实际上是可见的,它只会移动我的鼠标。在游戏中时,光标处于隐藏状态,因此无法正常工作。 实际使用以下命令移动鼠标即时通讯

Point location = new Point(System.Windows.Forms.Cursor.Position.X+moveAmount, System.Windows.Forms.Cursor.Position.Y);
System.Windows.Forms.Cursor.Position = location;

有人知道吗,为什么它在Minecraft中不起作用,我该如何解决?

我在stackoverflow上找到了这个问题,但那还是行不通的:

[DllImport("user32.dll")]
    static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);

    private const int MOUSEEVENTF_MOVE = 0x0001;

    public static void Move(int xDelta, int yDelta)
    {
        mouse_event(MOUSEEVENTF_MOVE, xDelta, yDelta, 0, 0);
    }

1 个答案:

答案 0 :(得分:0)

好吧,我实际上设法做到了。 经过研究并尝试了许多不同的方法,这是有效的:

[Flags]
    public enum MouseEventFlags {
        LeftDown = 0x00000002,
        LeftUp = 0x00000004,
        MiddleDown = 0x00000020,
        MiddleUp = 0x00000040,
        Move = 0x00000001,
        Absolute = 0x00008000,
        RightDown = 0x00000008,
        RightUp = 0x00000010
    }

    [DllImport("user32.dll")]
    private static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);

    public static void MouseEvent(MouseEventFlags value, MousePoint position2) {
        MousePoint position = position2;

        mouse_event
            ((int)value,
             position.X,
             position.Y,
             0,
             0)
            ;
    }

    [StructLayout(LayoutKind.Sequential)]
    public struct MousePoint {
        public int X;
        public int Y;

        public MousePoint(int x, int y) {
            X = x;
            Y = y;
        }

    }

如何调用方法:

MouseEvent(MouseEventFlags.Move, new MousePoint { X = 100, Y = 100 });