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


Когда пользователь нажимает клавишу, Windows помещает либо сообщение WM_KEYDOWN,либо сообщение WM_SYSKEYDOWN в очередь сообщений окна, имеющего фокус ввода. Когда клавиша отпускается, Windows помещает в очередь сообщений либо сообщение WM_KEYUP,либо сообщение WM_SYSKEYUP.

Итак,

  • Несистемные аппаратные сообщения – это сообщения WM_KEYDOWN и WM_KEYUP, а системные - WM_SYSKEYDOWN и WM_SYSKEYUP.

Системные аппаратные сообщения WM_SYSKEYDOWN и WM_SYSKEYUP более важны для Windows, чем для приложений.

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

Программы обычно игнорируют сообщения WM_SYSKEYDOWN и WM_SYSKEYUP и передают их в функцию DefWindowProc. Оконная процедура, в конце концов, получает другие сообщения, являющиеся результатом этих аппаратных сообщений клавиатуры (например, выбор меню).

При необходимости же включить в код программы инструкции для обработки системных аппаратных сообщений клавиатуры следует после обработки этих сообщений передать их в DefWindowProc, чтобы Windows могла по-прежнему их использовать в обычных целях:

case WM_SYSKEYDOWN: MessageBox(hWnd,”Message WM_SYSKEYDOWN”,”Key”,MB_OK); return(DefWindowProc(hWnd,message,wParam,lParam)); case WM_SYSKEYUP: MessageBox(hWnd,”Message WM_SYSKEYUP”,”Key”,MB_OK); return(DefWindowProc(hWnd,message,wParam,lParam));

Замечание.Рассмотрим, что произойдет, если не передать системные аппаратные сообщения в DefWindowProc. Почти все, что влияет на окно программы, в первую проходит через оконную процедуру. Windows самостоятельно обрабатывает сообщения только в том случае, если они передаются в DefWindowProc.

Например, пусть при обработке пришедшего в оконную процедуру сообщения добавлены строки для следующей обработки системных сообщений:

case WM_SYSKEYDOWN: case WM_SYSKEYUP: case WM_SYSCHAR: return 0;
  • При этом происходит запрет всех операций с клавишей <Alt> (команды меню, <Alt+Tab> и др.), когда окно программы имеет фокус ввода.

Несистемные сообщения WM_KEYDOWN и WM_KEYUP обычно вырабатываются для клавиш, которые нажимаются и отпускаются без участия клавиши <Alt>. Приложение может использовать или не использовать эти сообщения клавиатуры. Сама Windows их проигнорирует.

Обычно сообщения о нажатии и отпускании появляются парами. Однако если пользователь оставит клавишу нажатой так, чтобы включился автоповтор, то Windows посылает оконной процедуре серию сообщений WM_KEYDOWN (или WM_SYSKEYDOWN) и одно сообщение WM_KEYUP (или WM_SYSKEYUP), когда, в конце концов, клавиша будет отпущена.

  • Также как и все синхронные сообщения, аппаратные сообщения клавиатуры также становятся в очередь. Приложение с помощью функции GetMessageTime получить время нажатия и отпускания клавиши относительно старта системы.

Для всех аппаратных сообщений клавиатуры 32-разрядная переменная lParam,передаваемая в оконную процедуру, состоит из шести полей:

  1. счетчика повторений (число нажатий клавиши),
  2. скан-кода OEM (Original Equipment Manufacturer) (код клавиши, генерируемый аппаратурой компьютера),
  3. флага расширенной клавиатуры (1, если сообщение клавиатуры появилось в результате работы с дополнительными клавишами расширенной клавиатуры IBM),
  4. кода контекста (1, если нажата клавиша <Alt>),
  5. флага предыдущего состояния клавиши (0, если в предыдущем состоянии клавиша была отпущена, и 1, если в предыдущем состоянии она была нажата),
  6. флага состояния клавиши (0, если клавиша нажимается, и 1, если клавиша отпускается).

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

  • Для всех аппаратных сообщений клавиатуры параметр wParam содержит код виртуальной клавиши, соответствующей нажатой клавише. Именно этот параметр используется приложением для идентификации клавиши. Код виртуальной клавиши не зависит от аппаратной реализации клавиатуры. Коды виртуальных клавиш имеют символьные обозначения, определенные в заголовочных файлах Windows, и имеют префикс VK_.

Идея программы, получающей информацию о нажатии любой клавиши очень привлекательна; однако, большинство программ для Windows игнорируют все, кроме нескольких сообщений о нажатии и отпускании клавиш.

Сообщения WM_SYSKEYDOWN и WM_SYSKEYUP адресованы Windows, и приложению не всегда нужно их отслеживать. Если приложение обрабатывает сообщение WM_KEYDOWN, то сообщение WM_KEYUPоно обычно тоже игнорирует.

  • Сообщения WM_KEYDOWN достаточно удобны для обработки сообщений о нажатии клавиш управления курсором, функциональных клавиш и специальных клавиш (таких как <Insert> или <Delete>), не генерирующих символьные сообщения.


Дата добавления: 2017-01-26; просмотров: 1638;


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

Воспользовавшись поиском можно найти нужную информацию на сайте.

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

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.