Аппаратные сообщения.

 

 

Сообщения, которые приложение (ваша программа) получает от клавиатуры, различаются на аппаратные ( keystrokes ) и символьные ( characters ). Любое нажатие на клавиатуре генерирует аппаратное сообщение. Нажатие клавиши с каким-либо символом (буквой, цифрой, значком) должно привести к тому, что Windows , кроме аппаратного сообщения, пошлет в вашу программу символьное сообщение. Как это происходит, мы рассмотрим позже, а сейчас подробно рассмотрим аппаратные сообщения.

 

 

Операционная система выделяет в потоке аппаратных сообщений системные и несистемные сообщения. Системные сообщения обычно вырабатываются при нажатии клавиш в сочетании с клавишей < Alt >. Эти сообщения вызывают опции меню программы или системного меню (< Alt +функциональная клавиша>,< Alt + Esc >), или используются для системных функций, таких как смена активного окна (< Alt + Tab >). Обычно программа игнорирует системные сообщения, однако иногда возникает необходимость в их обработке.

 

 

Типы сообщений, поступающих в приложение от клавиатуры приведены в следующей таблице:

 

 


Типы сообщений

Несистемные аппаратные сообщения Системные аппаратные сообщения


Клавиша нажата WM_KEYDOWN WM_SYSKEYDOWN


Клавиша отпущена WM_KEYUP WM_SYSKEYUP


 

 

Обычно сообщения о нажатии и отпускании клавиши появляются парами. Исключение составляет тот случай, когда пользователь не отпускает клавишу и включается автоповтор. В последнем случае в программу направляется поток сообщений о нажатии клавиши.

 

 

Одновременно с одним из аппаратных сообщений приходят два параметра сообщения: lParam и wParam . Переменная lParam состоит из 6 полей:

 

Счетчик повторений. Равен числу нажатий клавиши, которое отражено в сообщении. В случае, когда его значение отлично от 1 (больше одного нажатия), это обычно означает, что программа не успевает обработать сообщения в реальном времени, либо система загружена в данный момент какой-либо работой. Ваша программа может как игнорировать число нажатий (реагировать только на сам факт нажатия), либо обрабатывать все нажатий клавиши клавиатуры.

 

 

Скан-код. Является кодом клавиатуры, генерируемым аппаратурой, то есть является тем кодом, который непосредственно приходит от клавиатуры. Обычно игнорируется приложением.

 

 

Флаг расширенной клавиатуры. Устанавливается в 1, если сообщение пришло от дополнительной клавиатуры (клавиши управления курсором, цифровая клавиатура и др.)

 

 

Код контекста. Код контекста устанавливается в 1, если нажата клавиша < Alt >. Часто, при помощи этого бита можно выделить системные сообщения.


– 31 –

 

 

Флаг предыдущего состояния клавиши. Равен 0, если в предыдущем состоянии клавиша была отпущена, и 1, если в предыдущем состоянии она была нажата.

 

 

Флаг состояния клавиши. Равен 0, если клавиши нажимается, и 1, если клавиша отпускается.

 

 

Второй параметр wParam содержит виртуальный код клавиши ( virtual key code ), идентифицирующий нажатую и отпущенную клавишу, чем реализуется аппаратная независимость программного представления клавиатуры. Виртуальные коды клавиш, которые вы используете, имеют имена, определенные в заголовочных файлах Windows . Вот несколько примеров виртуальных кодов:

 

 


Нажатая клавиша

 

Ctrl-Break

Tab ( табуляция ) Shift

Enter Ctrl Alt Esc

Пробел Стрелка влево Стрелка вправо Стрелка вниз Стрелка вверх Delete

End Home Page Up

Page Down F1


Идентификатор, определенный в windows . h

VK_CANCEL VK_TAB VK_SHIFT VK_ENTER VK_CONTROL VK_MENU VK_ESCAPE VK_SPACE VK_LEFT VK_RIGHT VK_DOWN VK_UP VK_DELETE VK_END VK_HOME VK_PRIOR VK_NEXT VK_F1


Десятичный код

 

3 9 13 16 17 18 27 32 37 38 40 39 46 35 36 33 34 70


 

 








Дата добавления: 2016-11-22; просмотров: 1397;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.007 сек.