Консоль c ++ - Как поймать определенное нажатие / удержание клавиши в Windows 7 - PullRequest
0 голосов
/ 27 сентября 2019
#include <iostream>
#include <windows.h>
using namespace std;
int main(){
    int a=0,b=0;
    while(a!=1) {
        if(GetKeyState(0x1B)) {
            cout << "ESC is hit after " << b << "seconds!";
            a++;
        }
        else{
            b++;
            Sleep(1000);
        }
    }
    return 0;
}

Привет, я делаю простую текстовую консольную игру.В любом случае, вот в чем дело: вместо случая в приведенном выше коде я хочу, чтобы этот цикл прерывался, когда эта клавиша удерживается, скажем, в течение 3 секунд (3000 миллисекунд), вместо того, чтобы получить удар один раз.

Как это сделать просто?

PS: я использую старую версию компилятора dev c ++, которая использует c ++ 03, потому что мне этого достаточно.Заранее спасибо!

PS 2: Хорошо, решено.

1 Ответ

0 голосов
/ 27 сентября 2019

вы можете использовать GetAsyncKeyState.Ниже приведен пример кода

while(1) {
    time1 = get_current_time
    while((GetAsyncKeyState(key) & 0x8000))
    time2 = get_current_time
    if (time2-time1 > 3) {
        //long press detected more than 3 seconds
        break;
    } 
}
...