|
#include <windows.h> |
|
#include <stdio.h> |
|
#include <ctype.h> |
|
|
|
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; |
|
} |
|
} |
|
} |
|
|