#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