#include #include #include int main(int argc, char *argv[]) { static int escCount = 0; HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); while (true) { DWORD count; INPUT_RECORD ir; if (!ReadConsoleInput(hStdin, &ir, 1, &count)) { printf("ReadConsoleInput failed\n"); return 1; } if (true) { DWORD mode; GetConsoleMode(hStdin, &mode); SetConsoleMode(hStdin, mode & ~ENABLE_PROCESSED_INPUT); } if (ir.EventType == KEY_EVENT) { const KEY_EVENT_RECORD &ker = ir.Event.KeyEvent; printf("%s", ker.bKeyDown ? "dn" : "up"); printf(" ch="); if (isprint(ker.uChar.AsciiChar)) printf("'%c'", ker.uChar.AsciiChar); printf("%d", ker.uChar.AsciiChar); printf(" vk=%#x", ker.wVirtualKeyCode); printf(" scan=%#x", ker.wVirtualScanCode); printf(" state=%#x", (int)ker.dwControlKeyState); printf(" repeat=%d", ker.wRepeatCount); printf("\n"); if (ker.uChar.AsciiChar == 27 && ++escCount == 6) break; } } }