Я нашел this piece of code онлайн:Получить нажатие клавиши в окнах консоли
CHAR getch() {
DWORD mode, cc;
HANDLE h = GetStdHandle(STD_INPUT_HANDLE);
if (h == NULL) {
return 0; // console not found
}
GetConsoleMode(h, &mode);
SetConsoleMode(h, mode & ~(ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT));
TCHAR c = 0;
ReadConsole(h, &c, 1, &cc, NULL);
SetConsoleMode(h, mode);
return c;
}
Используя это нравится:
while(1) {
TCHAR key = getch();
}
Я могу получить цифровой, буквенный даже возврата нажатий клавиш. Но я не могу получить выход или другие функциональные клавиши, такие как управление, alt. Можно ли изменить его, чтобы обнаружить также эти ключи?
Это для графического интерфейса пользователя заявление с, а не для консольных приложений. Результаты, которые вы собираетесь получить, не синхронизируются с состоянием входного буфера консоли. –
он полностью работает для консольного приложения. Я уже использовал его. – Rifzy
. Вы получите символы, вы не собираетесь синхронизировать их с функциями ввода консоли, Win32 stdin и CRT stdin (и с помощью 'GetAsyncKeyState' вы даже не собираетесь чтобы синхронизировать их с входной очередью потока). Это имеет тонкие последствия, поэтому, если вы не поймете их полностью, вы должны избегать этого. –