Что нового

Как закрепить хоткей за определённым приложением?

V

VitAl2013

Гость
Если пишем hotkey() функцию, то она начинает ловить кнопки вне зависимости от того какое приложение активно. Можно ли сделать хоткеи которые работают толлько в самом autoit приложении. Тотже ESC например.
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
Пора бы этот вопрос в FAQ занести :smile:

Создаются акселераторы:

Код:
$SelectAll = GUICtrlCreateDummy()
$SaveDoc = GUICtrlCreateDummy()


Затем им назначаются хоткеи:

Код:
Global $AccelKeys[2][2] = [["^a", $SelectAll], ["^s", $SaveDoc]]
GUISetAccelerators($AccelKeys)



Затем в основном цикле:

Код:
While 1
$nMsg = GUIGetMsg()
	Switch $nMsg
		
		Case $GUI_EVENT_CLOSE
			Exit
		
		Case $SelectAll
			SelectAll()
			
		Case $SaveDoc
			SaveAs()
			

	EndSwitch
WEnd
 
Автор
V

VitAl2013

Гость
Правильно ли я понял логическая подоплёка этого в том, что присваевается хоткей мнимому элементу для его активации, активация же запускает завершение скрипта или программы?
 

tech-gs

Знающий
Сообщения
54
Репутация
5
А как быть, если цикл GUIGetMsg() не используется, а события обрабатываются следующим образом:

Код:
$SelectAll = GUICtrlCreateDummy()
$SaveDoc = GUICtrlCreateDummy()
Global $AccelKeys[2][2] = [["^a", $SelectAll], ["^s", $SaveDoc]]
GUISetAccelerators($AccelKeys)

AutoItSetOption("GUIOnEventMode", 1)
GUISetOnEvent($GUI_EVENT_CLOSE, "FORM_Event", $hGUI)
GUISetOnEvent($GUI_EVENT_RESTORE, "FORM_Event", $hGUI)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND_Event")
GUIRegisterMsg($WM_TIMER, "WM_TIMER_Event")

GUISetAccelerators($AccelKeys)
GUISetOnEvent($SaveDoc, "App_SaveDoc", $hGUI)	; !!! Здесь программа вылетает

Func FORM_Event()
	Switch @GUI_CtrlId
		Case $GUI_EVENT_CLOSE
			; ...
		Case $GUI_EVENT_RESTORE
			; ...
	EndSwitch
EndFunc

Func WM_COMMAND_Event($hWnd, $Msg, $wParam, $lParam)
#forceref $hWnd, $Msg
Local $nNotifyCode = BitShift($wParam, 16) ; Hi Word
Local $nID = BitAND($wParam, 0x0000FFFF) ; Low Word
Local $hCtrl = $lParam
	Switch $nNotifyCode
		Case $BN_CLICKED
			; ...
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc

Func Script_WM_TIMER($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $ilParam
	; ...
EndFunc


Т.е., не получается назначить горячую клавишу из $SaveDoc функции App_SaveDoc().
 
Верх