Тема: 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 эта задача по другому не решается?