Цикл повторил оператор do с левой кнопкой мыши, переменная click & hold - PullRequest
0 голосов
/ 19 января 2019

Привет, сейчас я тестирую автокликер для нескольких игр, я совсем новичок в C ++

Как использовать левую кнопку мыши для запуска оператора do для функции щелчка мыши без остановки оператора do

Я пробовал разные флаги, включая:

input.mi.dwFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP);

с помощью mouse_event (MOUSEEVENTF)

do {
    if (GetAsyncKeyState(VK_LBUTTON) & 0x80000000) {
        enabled = true;

        while (GetAsyncKeyState(VK_LBUTTON) & 0x80000000) {
            Sleep(1000 / cps);
            INPUT input;
            input.type = INPUT_MOUSE;
            input.mi.dx = 0;
            input.mi.dy = 0;
            input.mi.dwFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP);
            input.mi.mouseData = 0;
            input.mi.dwExtraInfo = NULL;
            input.mi.time = 0;
            SendInput(1, &input, sizeof(INPUT));

        }
    }


} while (true);

Я пытаюсь сделать так, чтобы, удерживая нажатой левую кнопку, запускался оператор while, содержащий функцию автоклика, без остановки оператора while из-за повторяющихся нажатий.

1 Ответ

0 голосов
/ 22 января 2019

Есть что-то, что вы должны заметить в своем коде:

Во-первых, как оценить возвращаемое значение GetAsyncKeyState ()

Если функция завершается успешно, возвращаемое значение указывает, была ли клавиша нажата с момента последнего вызова GetAsyncKeyState, и была ли клавиша в данный момент вверх или вниз.Если установлен старший значащий бит, клавиша нажата, а если установлен младший значащий бит, клавиша была нажата после предыдущего вызова GetAsyncKeyState.Тем не менее, вы не должны полагаться на это последнее поведение;для получения дополнительной информации см. примечания.

тип возвращаемого значения - SHORT, который составляет 2 байта.Вместо этого попробуйте GetAsyncKeyState(VK_LBUTTON) & 0x8000.

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

Пример кода:

do {
        if (GetAsyncKeyState(VK_LBUTTON) & 0x8000)
        {
            enabled = true;
            while (GetAsyncKeyState(VK_LBUTTON) & 0x8000) 
            {
                INPUT input[2];
                input[0].type = input[1].type = INPUT_MOUSE;
                input[0].mi.dx = 0;
                input[0].mi.dy = 0;
                input[0].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN;
                input[1].mi.dx = 0;
                input[1].mi.dy = 0;
                input[1].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP;
                SendInput(2, input, sizeof(INPUT) * 2);
            }
        }


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