Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #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("Вызови хоткей 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement