|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Reading Input Buffer Events
The ReadConsoleInput function can be used to directly access a console's input buffer. When a console is created, mouse input is enabled and window input is disabled. To ensure that the process receives all types of events, this example uses the SetConsoleMode function to enable window and mouse input. Then it goes into a loop that reads and handles console input events.
VOID MouseEventProc(MOUSE_EVENT_RECORD); VOID ResizeEventProc(WINDOW_BUFFER_SIZE_RECORD); VOID KeyEventProc(KEY_EVENT_RECORD); VOID GetInputEvents(VOID); DWORD main(VOID) { HANDLE hStdin; DWORD cNumRead, fdwMode, fdwSaveOldMode, i; INPUT_RECORD irInBuf[128]; /* Get the standard input handle. */ hStdin = GetStdHandle(STD_INPUT_HANDLE); if (hStdin == INVALID_HANDLE_VALUE) MyErrorExit("GetStdHandle"); /* Save the current input mode, to be restored on exit. */
if (! GetConsoleMode(hStdin, &fdwSaveOldMode) ) MyErrorExit("GetConsoleMode"); /* Enable the window and mouse input events. */ fdwMode = ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT; if (! SetConsoleMode(hStdin, fdwMode) ) MyErrorExit("SetConsoleMode"); /* Loop to read and handle the input events. */ while (1) { /* Wait for the events. */ if (! ReadConsoleInput( hStdin, /* input buffer handle */
irInBuf, /* buffer to read into */ 128, /* size of read buffer */ &cNumRead) ) /* number of records read */ MyErrorExit("ReadConsoleInput"); /* Dispatch the events to the appropriate handler. */ for (i = 0; i < cNumRead; i++) switch(irInBuf[i].EventType) { case KEY_EVENT: /* keyboard input */ KeyEventProc(irInBuf[i].Event.KeyEvent);
break; case MOUSE_EVENT: /* mouse input */ MouseEventProc(irInBuf[i].Event.MouseEvent); break; case WINDOW_BUFFER_SIZE_EVENT: /* scrn buf. resizing */ ResizeEventProc( irInBuf[i].Event.WindowBufferSizeEvent); break; case FOCUS_EVENT: /* disregard focus events */ case MENU_EVENT: /* disregard menu events */
break; default: MyErrorExit("unknown event type"); break; } } return 0; }
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Чтение Входных Буферных Событий
Функция ReadConsoleInput может быть использована, чтобы непосредственно иметь доступ к консольному входному буферу. Когда консоль создана, вклад мыши приспособлен и вклад окна выведен из строя. Для того, чтобы проверять, что процесс получает все типы событий, этот пример использует функцию SetConsoleMode, чтобы приспосабливаться вклад окна и мыши. Затем это вступает в цикл, который читает и оперирует консольные входные события.
АННУЛИРУЙТЕ MouseEventProc(MOUSE_EVENT_RECORD); АННУЛИРУЙТЕ ResizeEventProc(WINDOW_BUFFER_SIZE_RECORD); АННУЛИРУЙТЕ KeyEventProc(KEY_EVENT_RECORD); НЕДЕЙСТВИТЕЛЬНАЯ GetInputEvents(ПУСТОТА); ОСНОВА DWORD(ПУСТОТА) { РУЧКА hStdin; DWORD cNumRead, fdwMode, fdwSaveOldMode, Я; INPUT_RECORD irInBuf[128]; /* Получите стандартный вклад handle. */ hStdin = GetStdHandle(STD_INPUT_HANDLE); если (hStdin == INVALID_HANDLE_VALUE) MyErrorExit("GetStdHandle"); /* Сохраните текущий входной способ, чтобы быть восстановленн в exit. */
если (! GetConsoleMode(hStdin, &fdwSaveOldMode) ) MyErrorExit("GetConsoleMode"); /* Приспособьтесь окно и вклад мыши events. */ fdwMode = ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT; если (! SetConsoleMode(hStdin, fdwMode) ) MyErrorExit("SetConsoleMode"); /* Цикл, чтобы читать и оперировать вклад events. */ пока (1) { /* Подождите events. */ если (! ReadConsoleInput( hStdin, /* ВХОДНАЯ буферная ручка */
irInBuf, /* БУФЕР, чтобы читать в */ 128, /* размер буфера чтения */ &cNumRead) ) /* количество записей было прочитано */ MyErrorExit("ReadConsoleInput"); /* Пошлите события в подходящий handler. */ для (i = 0; я < cNumRead; я++) ключ(irInBuf[i].EventType) { случай KEY_EVENT: /* ввод данных с клавиатуры */ KeyEventProc(irInBuf[i].Случай.KeyEvent);
прерывание; случай MOUSE_EVENT: /* вклад мыши */ MouseEventProc(irInBuf[i].Случай.MouseEvent); прерывание; случай WINDOW_BUFFER_SIZE_EVENT: /* scrn менять размеры buf. */ ResizeEventProc( irInBuf[i].Случай.WindowBufferSizeEvent); прерывание; случай FOCUS_EVENT: /* проигнорируйте события фокуса */ случай MENU_EVENT: /* проигнорируйте события меню */
прерывание; умолчание: MyErrorExit(ТИП "unknown события"); прерывание; } } возврат 0; }
|
|
|
|
| |