WM_HOTKEY
Сообщение выполняется при использовании зарегистрированных горячих клавиш для текущего процесса.
Параметры
Указанные параметры передаются системой.$wParam | Идентификатор, на который зарегистрирована горячая клавиша, целое число от 1001 и более |
$lParam |
Двойное слово содержит модификатор и виртуальную клавишу: младшее слово - модификатор, который может быть комбинацией следующих значений MOD_ALT - клавиша Alt MOD_CONTROL - клавиша Ctrl MOD_SHIFT - клавиша Shift MOD_WIN - клавиша Windows старшее слово - виртуальная клавиша |
Примечания
Смотрите функцию GUIRegisterMsg.Пример
#include <WindowsConstants.au3>
#include <EditConstants.au3>
Global $k = 0
Global Const $HOTKEYF_SHIFT = 0x01
Global Const $HOTKEYF_CONTROL = 0x02
Global Const $HOTKEYF_ALT = 0x04
Global Const $MOD_ALT = 0x1
Global Const $MOD_SHIFT = 0x4
$hGUI = GUICreate("WM_HOTKEY (для теста Ctrl+A)", 560, 190)
$myedit = GUICtrlCreateEdit('Функция WM_HOTKEY выполняется при вызове зарегистрированных горячих клавиш. Каждой горячей клавише назначается идентификатор ID от 1001 и далее. Переменная $iModKey содержит сумму модификаторов (Shift=1, Ctrl=2, Alt=4), а переменная $sVirtKey - номер клавиши клавиатуры. Этот пример взят при разборе GuiHotKey.au3 и GuiHotKey_Example.au3 от rasim.' & @CRLF & 'Горячая клавиша действует даже когда окно неактивно, но при условии, что клавиша не была занята другим приложением запущенным ранее.', 10, 10, 540, 170, $ES_AUTOVSCROLL + $WS_VSCROLL + $ES_NOHIDESEL + $ES_WANTRETURN)
GUISetState()
Send("{END}")
GUIRegisterMsg(0x312, "WM_HOTKEY")
$sID = 1001
_GuiCtrlHotKey_RegisterHotkey($hGUI, $sID, StringUpper(Asc('A')), 'Ctrl') ; Ctrl + A
If @error Then MsgBox(0, 'Сообщение', 'Не удалось зарегистрировать Ctrl + A')
_GuiCtrlHotKey_RegisterHotkey($hGUI, $sID + 1, StringUpper(Asc('Q')), 'Alt') ; Alt + Q
If @error Then MsgBox(0, 'Сообщение', 'Не удалось зарегистрировать Alt + Q')
_GuiCtrlHotKey_RegisterHotkey($hGUI, $sID + 2, StringUpper(Asc('Q')), 'Ctrl+Alt') ; Ctrl + Alt + Q
If @error Then MsgBox(0, 'Сообщение', 'Не удалось зарегистрировать Ctrl + Alt + Q')
Do
Until GUIGetMsg() = -3
Func WM_HOTKEY($hWnd, $Msg, $wParam, $lParam)
$iModKey = BitAND($lParam, 0xFFFF) ; _WinAPI_LoWord
$sVirtKey = BitShift($lParam, 16) ; _WinAPI_HiWord
$iID = Number($wParam)
$Res = ''
If BitAND($iModKey, $HOTKEYF_CONTROL) Then $Res &= 'Ctrl+'
If BitAND($iModKey, $MOD_SHIFT) Then $Res &= 'Shift+'
If BitAND($iModKey, $MOD_ALT) Then $Res &= 'Alt+'
Switch $iID
Case 1001
GUICtrlSendMsg($myedit, $EM_SETSEL, 0, -1)
Case 1002
MsgBox(0, 'Сообщение', 'Хоткей зарегистрированный на ID=1002')
Case 1003
MsgBox(0, 'Сообщение', 'Хоткей зарегистрированный на ID=1003')
EndSwitch
$k += 1
WinSetTitle($hGUI, '', 'Вызов ' & $k & ' раз, Модификатор=' & $Res & ', Клавиша=' & Chr($sVirtKey) & ', ID=' & $iID)
EndFunc
;rasim, mod AZJIO
Func _GuiCtrlHotKey_RegisterHotkey($hWnd, $sID, $sVirtKey, $sModKey)
Local $iModKey = 0
If StringInStr($sModKey, 'Shift') Then $iModKey = BitOR($iModKey, $MOD_SHIFT)
If StringInStr($sModKey, 'Ctrl') Then $iModKey = BitOR($iModKey, $HOTKEYF_CONTROL)
If StringInStr($sModKey, 'Alt') Then $iModKey = BitOR($iModKey, $MOD_ALT)
$aRet = DllCall("user32.dll", "int", "RegisterHotKey", _
"hwnd", $hWnd, _
"int", $sID, _
"int", $iModKey, _
"int", "0x" & Hex($sVirtKey, 2))
Return SetError(Not $aRet[0], 0, $aRet[0])
EndFunc