Как создать скрипт для автоматического перемещения мыши относительно текущего положения мыши под углом 45 градусов - PullRequest
0 голосов
/ 05 мая 2020

Итак, цель программы состоит в том, чтобы при нажатии xbutton2 я хочу, чтобы программа автоматически перемещала мою мышь под углом 45 градусов относительно текущего положения моей мыши и затем автоматически нажимала клавишу K.

Я был учитывая, что сценарий .ahk запускает только позицию мыши, а затем перемещает относительное перемещение к координатам X и Y, однако это не сработало, поскольку любое уже имеющееся перемещение переопределило бы его.

Я также получил C# сценарий от другого кодировщика, который смог добиться аналогичного результата, однако он не работает в игре и не был создан для той же цели (может быть перепрофилирован). Я добавлю корзину для вставки, если это поможет.

https://pastebin.com/dxXKfQpj> C# Код

Вот мой код:

*xbutton2::
        MouseGetPos, x, y
        MouseMove, x+5.5, y+6.5
        MouseMove, x+5.5, y+6.5
        Send K
return```

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Если вы хотите переместить его на 45 градусов, смещение по x должно быть равно y, поэтому:

xbutton2::
        MouseGetPos, x, y
        MouseMove, x+6.5, y+6.5
        MouseMove, x+6.5, y+6.5
        Send K
return

Думаю, ваши смещения вас устраивали, возможно, ваша проблема в том, что вы играете игра, которая искажает способность AHK правильно перемещать и отправлять ключи. Здесь - это еще один форум, на котором обсуждается более подробно.

Вы также говорите, что движения перекрываются. Вы запускаете более одного сценария AHK одновременно? Если да, то, возможно, один из них застрял в al oop (случилось со мной).

Надеюсь, это поможет!

0 голосов
/ 05 мая 2020

То, что я использовал годы go для приложения, чтобы жестко управлять другими приложениями:

   public class Win32Input
    {
        [DllImport("user32.dll", EntryPoint = "SendInput", SetLastError = true)]
        static extern uint SendInput(uint nInputs, INPUT[] pInputs, int cbSize);

        private enum InputType
        {
            INPUT_MOUSE = 0,
            INPUT_KEYBOARD = 1,
            INPUT_HARDWARE = 2,
        }

        [Flags()]
        private enum MOUSEEVENTF
        {
            MOVE = 0x0001,  // mouse move 
            LEFTDOWN = 0x0002,  // left button down
            LEFTUP = 0x0004,  // left button up
            RIGHTDOWN = 0x0008,  // right button down
            RIGHTUP = 0x0010,  // right button up
            MIDDLEDOWN = 0x0020,  // middle button down
            MIDDLEUP = 0x0040,  // middle button up
            XDOWN = 0x0080,  // x button down 
            XUP = 0x0100,  // x button down
            WHEEL = 0x0800,  // wheel button rolled
            VIRTUALDESK = 0x4000,  // map to entire virtual desktop
            ABSOLUTE = 0x8000,  // absolute move
        }

        [StructLayout(LayoutKind.Sequential)]
        private struct MOUSEINPUT
        {
            public int dx;
            public int dy;
            public int mouseData;
            public MOUSEEVENTF dwFlags;
            public int time;
            public IntPtr dwExtraInfo;
        }

        [StructLayout(LayoutKind.Sequential)]
        private struct INPUT
        {
            public InputType type;
            public MOUSEINPUT mi;
        }

        public static uint Move(int x, int y)
        {
            float ScreenWidth = Screen.PrimaryScreen.Bounds.Width;
            float ScreenHeight = Screen.PrimaryScreen.Bounds.Height;

            INPUT input_move = new INPUT();
            input_move.type = InputType.INPUT_MOUSE;

            input_move.mi.dx = (int)Math.Round(x * (65535 / ScreenWidth), 0);
            input_move.mi.dy = (int)Math.Round(y * (65535 / ScreenHeight), 0);
            input_move.mi.mouseData = 0;
            input_move.mi.dwFlags = (MOUSEEVENTF.MOVE | MOUSEEVENTF.ABSOLUTE);
            input_move.mi.time = 0;
            input_move.mi.dwExtraInfo = GetMessageExtraInfo();

            INPUT[] input = { input_move };
            return SendInput(1, input, Marshal.SizeOf(input_move));
        }
    }

Я помню, как копировал этот код из ресурса inte rnet. Возможно ТАК.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...