Азбука программирования в Win32 API


Азбука программирования в Win32 API - стр. 217


До нормальной работы осталось немного - узнать, какая информация записывается в структуру типа LNPUT_RECORD и как мы можем ее использовать. Давайте остановимся на каждом типе событий отдельно.

События с клавиатурой

События клавиатуры генерируются каждый раз при нажатии клавиши. При этом поле EventType структуры типа _INPUT_RECORD содержит значение   KEY_EVENT,   а   в   объединение   Event   записывается   поле KeyEvent типа KEY_EVENT_RECORD. Этот тип определен в wincon.h: typedef struct _KEY_EVENT_RECORD { BOOL bKeyDown; WORD wRepeatCount; WORD wVirtuaiKeyCode; WORD wVirtualScanCode; union {

WCHAR UnicodeChar; CHAR   AsciiChar; } uChar;

DWORD dwControlKeyState; } KEY_EVENT_RECORD, *PKEY_EVENT_RECORD;

260

Для того чтобы нормально обрабатывать события с клавиатурой, нам необходимо подробно разобрать назначение полей этой структуры. Программисты, знакомые с обработкой клавиатурных прерываний в DOS, увидят здесь множество знакомых характеристик. К сожалению, рамки этой книги не позволяют мне описать основы работы с клавиатурой. Если читатель чувствует, что у него в этой области есть пробел, рекомендую изучить этот вопрос по другим изданиям.

Если событие с клавиатурой состояло в нажатии клавиши, то поле bKeyDown принимает значение TRUE. Значение FALSE говорит о том, что произошло отжатие клавиши.

Если клавиша нажата и код клавиши начал генерироваться повторно, поле wRepeatCount является счетчиком повторов, что, кстати, следует и из его названия.

Виртуальный код нажатой клавиши записывается в поле wVirtualKeyCode, а виртуальный скан-код - в поле wVirtualScanCode.

Объединение uChar содержит ASCII или Unicode код нажатой клави­ши в зависимости от того, какая версия функции ReadConsolelnputQ, ASCII или Unicode, используется.

И наконец, поле dwControlKeyState указывает на состояние управ­ляющих клавиш. Их возможные значения приведены в табл. 59.

Т а б л и ц а 59. Флаги состояния управляющих клавиш

Флаг

 

Значение

 

Эффект

 

RIGHT ALT PRESSED

 

0x0001

 

Нажат правый Alt

 

LEFT ALT PRESSED

 

0x0002

 

Нажат левый Alt

 

RIGHT CTRL PRESSED

 

0x0004

 

Нажат правый Ctrl

 

LEFT CTRL PRESSED

 

0x0008

 

Нажат левый Ctrl

 

SHIFT PRESSED

 

0x0010

 

Нажат Shift

 

NUMLOCK ON

 

0x0020

 

NumLock горит

 

SCROLLLOCK ON

 

0x0040

 

ScrollLock горит

 

CAPSLOCK ON

 

0x0080

 

CapsLock горит

 

ENHANCED KEY

 

0x0100

 

Клавиша с двойным скан-кодом

 

<


Начало  Назад  Вперед



Книжный магазин