Обработка и эмуляция мультимедийных кнопок клавиатуры
Обработка и эмуляция мультимедийных кнопок клавиатуры
Практически все современные клавиатуры имеют несколько специальных, так называемых мультимедийных кнопок для управления громкостью звука, навигацией браузера, плеером, запуска почтовой программы или калькулятора и так далее. Их количество и функционал зависит от производителя и модели клавиатуры. Особенностью этих кнопок является то, что при нажатии они не генерируют скан-кодов, не порождают события типа WM_KEYDOWN, не отслеживаются в полях ввода типа msctls_hotkey32.
Но оказывается, что работать с ними очень просто. В процедуре обработки окна надо отслеживать сообщение WM_APPCOMMAND, оно приходит, когда окно активно и нажата какая-либо мультимедийная кнопка.
Code (Assembler) : Убрать нумерацию
- WM_APPCOMMAND = 0x319
- ...
- ; Пришло сообщение от мультимедийной кнопки?
- cmp [msg],WM_APPCOMMAND
- je wm_mmkey
Code (Assembler) : Убрать нумерацию
- wm_mmkey:
- ; Код нажатой кнопки приходит в lParam
- mov eax,[lparam]
- shr eax,16
- ; EAX = код кнопки
- ...
От обработки переходим к эмуляции нажатий мультимедийных кнопок. Эмуляцию можно использовать не только для имеющихся кнопок, но и в том случае, когда на клавиатуре какие-либо кнопки отсутствуют или даже вообще нет ни одной мультимедийной кнопки. Использовать эмуляцию нажатий на мультимедийные кнопки гораздо проще и удобнее, чем, например, регулировать громкость или отключать звук средствами WinAPI, так что этот способ может оказаться весьма полезным.
Code (Assembler) : Убрать нумерацию
- WM_APPCOMMAND = 0x319
- ...
- ; Получить хэндл рабочего стола
- invoke GetShellWindow
- ; Отправить ему сообщение о нажатии кнопки "Calculator"
- invoke SendMessage,eax,WM_APPCOMMAND,0,(12h shl 16)
- ...
REGEDIT4
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\AppKey\15]
"Association"="mailto"
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\AppKey\16]
"Association"=".cda"
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\AppKey\17]
"ShellExecute"="::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\AppKey\18]
"ShellExecute"="calc.exe"
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\AppKey\7]
"Association"="http"
В приложении примеры программ с исходными текстами, одна из которых при активном окне обрабатывает нажатия мультимедийных кнопок и показывает их код, а вторая эмулирует нажатие на кнопку запуска калькулятора.
Просмотров: 8965 | Комментариев: 8
Метки: Assembler, клавиатура
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
othy
(11.01.2015 в 13:25):
А как отследить и заблокировать нажатие кнопок: Power, Sleep. Они порой расположены совсем неудачно.
ManHunter
(23.11.2014 в 11:38):
Ну под вайном запустится, внутри ничего недокументированного не используется. А вот будет работать или нет - хз, я на никсах не сижу.
Doxtup
(23.11.2014 в 06:19):
Михаил, конечно, особенно импорт рег файла в реестр винды)
Михаил
(22.11.2014 в 23:40):
а на OS Linux будет работать?
ManHunter
(21.11.2014 в 13:19):
Сделал без переносов.
Андрей
(21.11.2014 в 13:15):
У "кода" "REGEDIT4" концы строк уехали "под календарь".
Compiller
(21.11.2014 в 11:59):
http://www.seriosoft.org
Очень полезная программа для настройки этих самых клавиш.
Очень полезная программа для настройки этих самых клавиш.
Добавить комментарий
Заполните форму для добавления комментария
2. Поменять клавиатуру.
3. В расширенных настройках плана электропитания поменять действие "Кнопки питания и крышка"