Быстро нажмите эту клавишу при нажатии определенной клавиши c. Как предотвратить нажатие спусковой кнопки? (c ++) - PullRequest
0 голосов
/ 21 июня 2020

Прошу прощения, если заголовок неясен .. но я не знал, как сделать это короче: c Приведенный ниже (извлекающий) код должен быстро нажать / отправить клавишу 'A', если клавиша 'U 'нажата / отправлена. Но если я нажму «U», он сначала отправит «U», а затем сразу несколько «A». Как сделать так, чтобы клавиша «U» вообще не отправлялась? Я пробовал разные вещи, но у меня не получалось заставить его работать ... Думаю, проблема в условии if: /

INPUT ip; // Structure for creating keyboard-events
ip.type = INPUT_KEYBOARD; // Create a generic keyboard-event
ip.ki.wScan = 0;       // Hardware-Scan-Code for the key
ip.ki.time = 0;        //
ip.ki.dwExtraInfo = 0; //

for (;;) {
    sleep_for(milliseconds(1)); // Sleep in each iteration so the CPU / RAM have a relaxed life
    if (GetAsyncKeyState(0x55)) {   // If key 'U' is pressed
        ip.ki.wVk = 0x41;                 // Press key 'A'
        ip.ki.dwFlags = 0;                //
        SendInput(1, &ip, sizeof(INPUT)); //

        ip.ki.dwFlags = KEYEVENTF_KEYUP;    // Release key that was pressed
        SendInput(1, &ip, sizeof(INPUT));   //
    }
}

1 Ответ

1 голос
/ 29 июня 2020

Вы вызываете GetAsyncKeyState () в oop. Если определяет, нажата ли клавиша. Он вызывает функцию несколько раз во время нажатия клавиши. Когда вы нажимаете клавишу, обычно это занимает 5-25 миллисекунд, поэтому GetASyncKeyState () обнаруживает нажатие клавиши несколько раз.

GetASyncKeyState () возвращает короткое целое число, если установлен младший бит, то клавиша уже был обнаружен при предыдущем вызове GetASyncKeyState ()

Чтобы исправить код, просто проверьте этот бит с помощью побитового оператора AND

if (GetAsyncKeyState(0x55) &1)

Это также полезно при переключении логических значений или функций.

...