- if (!init) {
- init = 1;
- inh = GetStdHandle(STD_INPUT_HANDLE);
- pipe = !GetConsoleMode(inh, &dw);
- if (!pipe) {
- SetConsoleMode(inh, dw & ~(ENABLE_MOUSE_INPUT | ENABLE_WINDOW_INPUT));
- FlushConsoleInputBuffer(inh);
- }
- }
- if (pipe) {
- if (!PeekNamedPipe(inh, NULL, 0, NULL, &dw, NULL))
- return 1;
- return dw;
- } else {
- // Count the number of unread input records, including keyboard,
- // mouse, and window-resizing input records.
- GetNumberOfConsoleInputEvents(inh, &dw);
- if (dw <= 0)
- return 0;
-
- // Read data from console without removing it from the buffer
- INPUT_RECORD rec[256];
- DWORD recCnt;
- if (!PeekConsoleInput(inh, rec, Min(dw, 256), &recCnt))
- return 0;
-
- // Search for at least one keyboard event
- for (DWORD i = 0; i < recCnt; i++)
- if (rec[i].EventType == KEY_EVENT)
- return 1;
-
- return 0;
- }