# KEY_EVENT_RECORD

Структура `KEY_EVENT_RECORD` используется для получения входных событий в консольной структуре `INPUT_RECORD`.

    typedef struct _KEY_EVENT_RECORD {
        BOOL bKeyDown;
        WORD wRepeatCount;
        WORD wVirtualKeyCode;
        WORD wVirtualScanCode;
        union {
            WCHAR UnicodeChar;
            CHAR  AsciiChar;
        } uChar;
        DWORD dwControlKeyState;
    } KEY_EVENT_RECORD;

### Элементы

bKeyDown
Равно `TRUE` если клавиша нажата, иначе `FALSE`.
wRepeatCount
Число повторов нажатия клавиши. Например, когда клавиша нажата, вы можете получить пять сообщений с этим членом равным 1, одно сообщение с равным 5, или несколько сообщений с элементом большим, либо равным 1.
wVirtualKeyCode
Виртуальный код клавиши, определяющий данную клавишу в независимой от устройства форме.
wVirtualScanCode
Виртуальный скан-код клавиши. Определяет устройство-зависимое значение, генерируемое аппаратурой клавиатуры.
uChar
Переведённый Unicode или ASCII символ, в зависимости от того, использовалась Wide- или ANSI-версия функции ReadConsoleInput.
dwControlKeyState
Состояние управляющих клавиш. Может быть комбинацией следующих значений:

Клавиша | Значение | Описание
--- | --- | ---
CAPSLOCK_ON | 0x0080 | CAPS LOCK включён.
ENHANCED_KEY | 0x0100 | Клавиша расширенная.
LEFT_ALT_PRESSED | 0x0002 | Левый ALT нажат.
LEFT_CTRL_PRESSED | 0x0008 | Левый CTRL нажат.
NUMLOCK_ON | 0x0020 | NUM LOCK включён.
RIGHT_ALT_PRESSED | 0x0001 | Правый ALT нажат.
RIGHT_CTRL_PRESSED | 0x0004 | Правый CTRL нажат.
SCROLLLOCK_ON | 0x0040 | SCROLL LOCK включён.
SHIFT_PRESSED | 0x0010 | Клавиша SHIFT нажата.

### Замечания

Расширенные клавиши для IBM® 101- и 102-х клавишных клавиатур - это `INS`, `DEL`, `HOME`, `END`, `PAGE UP`, `PAGE DOWN`, клавиши курсора, клавиша divide (`/`) и `ENTER` на цифровой части.
Сообщения клавиатурного ввода генерируются, когда любая клавиша, включая управляющую, нажата или отпущена. Однако, когда клавиша `ALT` нажимается и отпускается, это имеет специальное значение в Windows и такое событие не передаётся приложению. Также сочетание `CTRL`+`C` не передаётся, если хендл входной консоли имеет флаг `ENABLE_PROCESSED_INPUT`.
Смотрите также:
PeekConsoleInput, ReadConsoleInput, WriteConsoleInput, INPUT_RECORD