1 (изменено: RacalCucumber, 2023-09-19 16:11:36)

Тема: AHK: Переназначение или отмена Hotkey в GUI

Добрый день. Есть следующий пример:

Gui, Add, Hotkey, vHK
Gui, Add, Button, gSetHotkey, Set Hotkey
Gui, Show

SetHotkey() {
	global HK
	GuiControlGet, HK
	if (HK = "") {
		MsgBox Горячая клавиша не установлена!
		Return
	}
	Hotkey, % HK, Label, On
}

Label() {
   hk := SubStr(A_ThisHotkey, 0)
   MsgBox,,, Клавиша нажата, .5
   KeyWait, % hk
   MsgBox,,, Клавиша отпущена, .5
}

Если, к примеру я хочу изменить или удалить значение HK в запущенном скрипте, то получается, что HK одновременно присвоены два значения, предыдущее и новое. Что бы отменить старое значение HK и назначить новое, нужно добавить запись и чтение переменной HK в ini файл и перезапускать скрипт командой Reload вставив ее после "Hotkey, % HK, Label, On" в подпрограмме SetHotkey()

SetWorkingDir %A_ScriptDir% 

IniRead, HK,  test.ini, HKey, Hotkey
Gui, Add, Hotkey, vHK, %HK%
Gui, Add, Button, gSetHotkey, Set Hotkey
Gui, Show
if Not (HK = "") {
	Hotkey, % HK, Label, On
}

SetHotkey() {
	global HK
	GuiControlGet, HK
	if (HK = "") {
		MsgBox Горячая клавиша не установлена!
		Return
	}
	Hotkey, % HK, Label, On
	IniWrite, %HK%,  test.ini, HKey, Hotkey
	Sleep, 100
	Reload
}
Label() {
	hk := SubStr(A_ThisHotkey, 0)
	MsgBox,,, Клавиша нажата, .5
	KeyWait, % hk
	MsgBox,,, Клавиша отпущена, .5
}

Теперь вопрос. А без Reload можно как-то обойтись?

К чему возник этот вопрос.
При использовании вот этого решения по шифрованию скрипта https://www.autohotkey.com/boards/viewtopic.php?t=42494 скрипт запускается в именованом канале. И после команды Reload скрипт из канала пропадает, после чего закономерно возникает ошибка, что скрипт не найден. Видимо это можно решить снова в лоб, запуском дубликата скрипта и последующим ExitApp родительского, но это как-то уж слишком коряво получается.

А во-вторых, даже если не использовать шифрование скрипта дрыгание интерфейса после нажатия кнопки подтверждения сохранения нового значения горячей кнопки просто неэстетично...

Или в рамках AHK эта задача по другому не решается?

2

Re: AHK: Переназначение или отмена Hotkey в GUI

SetHotkey() {
    static prevHotkey := ""
	GuiControlGet, HK
	if (HK = "") {
		MsgBox Горячая клавиша не установлена!
		Return
	}
    if (prevHotkey != "")
        Hotkey, % prevHotkey, Off
	Hotkey, % HK, Label, On
    prevHotkey := HK
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: RacalCucumber, 2023-09-19 17:01:44)

Re: AHK: Переназначение или отмена Hotkey в GUI

т.е. выключение и последующее включение HotKey отменяет первоначальное назначения переменной? Класс, https://ahk-wiki.ru/hotkey
а тут написано что нельзя. Или там говориться о чем то ином.

В любом случае спасибо, плохо быть неучем...