keyeventf_keyup не отпускает ключ - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь создать консольное приложение на C #, которое будет нажимать и отпускать клавишу пробела, когда я удерживаю среднюю кнопку мыши.

Приложение работает в текстовых приложениях (блокнот, веб-браузер и т. Д.), Видя, как можно просто удерживать клавишу пробела, и оно будет фактически создавать пробелы, но не в играх.

Например, если я удерживаю среднюю кнопку, кажется, что она не регистрирует событие keyup, что означает, что я должен физически нажимать клавишу пробела, чтобы снова «прыгнуть».

Вот код:

    static void Main(string[] args)
    {
        Console.WriteLine("Press down the middle mouse button to jump.\n"
            + "Press F5 to pause the application.");


        while (true)
        {
            if ((GetAsyncKeyState(VK_MIDDLEBUTTON) & KEY_PRESSED) > 0)
            {
                SendInputWithAPI();
            }

            else if ((GetAsyncKeyState(VK_F5) & KEY_PRESSED) > 0)
            {
                PauseFunc();
            }

            Thread.Sleep(10);
        }
    }

    static void SendInputWithAPI()
    {
        INPUT[] Inputs = new INPUT[1];
        INPUT Input = new INPUT();

        Input.type = 1; // 1 = Keyboard Input
        Input.U.ki.wScan = ScanCodeShort.SPACE;
        Input.U.ki.dwFlags = KEYEVENTF.SCANCODE;
        Inputs[0] = Input;

        SendInput(1, Inputs, INPUT.Size);

        Random time = new Random();
        int randTime = time.Next(1, 4);

        Thread.Sleep(randTime);

        Input.U.ki.dwFlags = KEYEVENTF.KEYUP;
        SendInput(1, Inputs, INPUT.Size);

    }

    static void PauseFunc()
    {
        Console.WriteLine("Paused... Press any key to continue.");
        Console.ReadKey(true);
    }

А вот и весь код со всеми структурами:

https://hastebin.com/oregahesoh.cs

Я правильно сделал событие keyup?

Я точно знаю, что Thread.Sleep (randTime) не является проблемой, поскольку я пробовал разные времена (с точностью до секунды).

1 Ответ

0 голосов
/ 07 мая 2018

Я это исправил ..

Это то, что я добавил:

        Input.type = 1;
        Input.U.ki.dwFlags = KEYEVENTF.KEYUP | KEYEVENTF.SCANCODE;
        Inputs[0] = Input;

К событию keyup.

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