|
Console Input Buffer
Each console has an input buffer that contains a queue of input event records.
When a console's window has the keyboard focus, a console formats each input
event (such as a single keystroke, a movement of the mouse, or a mouse-button
click) as an input record that it places in the console's input buffer.
Applications can access a console's input buffer indirectly by using the
high-level console I/O functions, or directly by using the low-level console I/O
functions. The high-level input functions filter and process the data in the input
buffer, returning only a stream of input characters. The low-level input
functions enable applications to read input records directly from a console's input
buffer, or to place input records into the input buffer.
An input record is a structure containing information about the type of event
that occurred (keyboard, mouse, window resizing, focus, or menu event) as well
as specific details about the event. The EventType member in an INPUT_RECORD structure indicates which type of event is contained in the record.
Focus and menu events are placed in a console's input buffer for internal use
by the system and should be ignored by applications.
Keyboard Events
Keyboard events are generated when any key is pressed or released; this
includes control keys. However, the ALT key has special meaning to Windows when pressed and released without being
combined with another character, and it is not passed through to the application.
Also, the CTRL+C key combination is not passed through if the input handle is in processed
mode.
If the input event is a keystroke, the Event member in INPUT_RECORD is a KEY_EVENT_RECORD structure containing the following information:
- A Boolean value indicating whether the key was pressed or released.
- A repeat count that can be greater than one when a key is held down.
- The virtual-key code, identifying the given key in a device-independent
manner.
- The virtual-scan code, indicating the device-dependent value generated by the
keyboard hardware.
- The translated Unicode™ or ANSI character.
- A flag variable indicating the state of the control keys (the ALT, CTRL, SHIFT, NUM LOCK, SCROLL LOCK, and CAPS LOCK keys) and indicating whether an enhanced key was pressed. Enhanced keys for
the IBM® 101-key and 102-key keyboards are the INS, DEL, HOME, END, PAGE UP, PAGE DOWN, and arrow keys in the clusters to the left of the numeric keypad and the
divide (/) and ENTER keys in the numeric keypad.
Mouse Events
Mouse events are generated whenever the user moves the mouse or presses or
releases one of the mouse buttons. Mouse events are placed in the input buffer
only if the following conditions are met:
- The console input mode is set to ENABLE_MOUSE_INPUT (the default mode).
- The console window has the keyboard focus.
- The mouse pointer is within the borders of the console's window.
If the input event is a mouse event, the Event member in INPUT_RECORD is a MOUSE_EVENT_RECORD structure containing the following information:
- The coordinates of the mouse pointer in terms of the character-cell row and
column in the screen buffer's coordinate system.
- A flag variable indicating the state of the mouse buttons.
- A flag variable indicating the state of the control keys (ALT, CTRL, SHIFT, NUM LOCK, SCROLL LOCK, and CAPS LOCK) and indicating whether an enhanced key was pressed. Enhanced keys for the
IBM 101-key and 102-key keyboards are the INS, DEL, HOME, END, PAGE UP, PAGE DOWN, and arrow keys in the clusters to the left of the numeric keypad and the
divide (/) and ENTER keys in the numeric keypad.
- A flag variable indicating whether the event was a normal button-press or
button-release event, a mouse movement event, or the second click of a double-click
event.
Note that the mouse position coordinates are in terms of the screen buffer,
not the console window. The screen buffer may have been scrolled with respect to
the window, so the upper left corner of the window is not necessarily the (0,0)
coordinate of the screen buffer. To determine the coordinates of the mouse
relative to the coordinate system of the window, subtract the window origin
coordinates from the mouse position coordinates. Use the GetConsoleScreenBufferInfo function to determine the window origin coordinates.
The dwButtonState member of the MOUSE_EVENT_RECORD structure has a bit corresponding to each mouse button. The bit is 1 if the
button is down and 0 if the button is up. A button-release event is detected by
a 0 value for the dwEventFlags member of MOUSE_EVENT_RECORD and a change in a button's bit from 1 to 0. The GetNumberOfConsoleMouseButtons function retrieves the number of buttons on the mouse.
Buffer-Resizing Events
A console window's menu enables the user to change the size of the active
screen buffer; this change generates a buffer-resizing event. Buffer-resizing
events are placed in the input buffer if the console's input mode is set to
ENABLE_WINDOW_INPUT (that is, the default mode is disabled).
If the input event is a buffer-resizing event, the Event member of INPUT_RECORD is a WINDOW_BUFFER_SIZE_RECORD structure containing the new size of the screen buffer, expressed in
character-cell columns and rows.
If the user reduces the size of the screen buffer, any data in the discarded
portion of the buffer is lost.
Changes to the screen buffer size as a result of application calls to the SetConsoleScreenBufferSize function are not generated as buffer-resizing events.
| Last news from Greatis Software |
 |
|
Nostalgia .Net |
|
.Net is powerful, but not all-powerful, so sometimes we need to use Win32 API for our .Net applications. It's simple enough with Platform Invoke if you have Win32 skill, but we do not always have time to dig the ancient documentation, declare the special types that are compatible with Win32, find the values of the Win32's constants and so on. Nostalgia .Net offers several simple-to-use classes, and components that will allow you to forget about the headache of Win32 and just use the power of Win32 in your application the same way as you use the native. Net classes. More » |
| Recommended software for developers |
 |
|
Ultimate Pack |
|
Component pack for Delphi and C++ Builder that contains runtime form designer, runtime object inspector, print suite and much more for the very special price. More » |
 |
|
Form Designer .Net |
|
Unique runtime form design solution that allows to edit any form in .Net WinForms application at runtime with full source codes for only 300 euro! More » |
 |
|
Print Suite .Net |
|
Print Suite .Net is a set of components for easy printing texts, images and grids from your WinForms applications. Full C# source codes are available More » |
 |
|
Gradient Controls .Net |
|
Gradient Controls .Net offers controls with gradient background feature. Labels, panels and so on... Full C# source codes are available More » |
 |
|
Greatis iGrid |
|
iGrid plots drawing grid right over your desktop, so you can use it everywhere, with any drawing application without any special plugins for different graphic editors. More » |
All the contacts and projectsDmitry Vasiliev (just.dmitry)
Related LinksSoftware for Visual Studio .NET developers Software for Delphi and C++ Builder developers Software for Visual Basic 6 developers Delphi Tips&Tricks MegaDetailed.NET More Online Helps Win32 Programmer's Reference Win32 Multimedia Programmer's Reference OLE Programmer's Reference Microsoft Windows Pen API Programmer's Reference Microsoft Windows Sockets 2 Reference Microsoft Windows Telephony API (TAPI) Programmer's Reference Unix Manual Pages
|