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;
}
- Software for developers
-
Delphi Components
.Net Components
Software for Android Developers
- More information resources
-
MegaDetailed.Net
Unix Manual Pages
Delphi Examples