Скрипт, как я уже сказал выше, запускается без всякого события, просто после загрузки выполняется весь код и скрипт продолжает висеть в памяти.
Команда Hotkey динамически создаёт горячую клавишу. Например, можно создать горячую клавишу Alt + C так:
!c:: MsgBox, % A_ThisHotkey
А можно с помощью команды Hotkey:
Hotkey, !c, Label, On
Return
Label:
MsgBox, % A_ThisHotkey
Return
Кроме того, с помощью команды Hotkey можно создать контекст запуска горячей клавиши. Обычный способ:
#If WinActive("ahk_class Notepad")
!c:: MsgBox, % A_ThisHotkey
Используя Hotkey:
Hotkey, If, WinActive("ahk_class Notepad")
Hotkey, !c, Label, On
Return
Label:
MsgBox, % A_ThisHotkey
Return
#If WinActive("ahk_class Notepad")
При этом в коде где-то обязательно должна присутствовать обычная запись того же контекста (последняя строка).
Немного подправленный код скрипта с комментариями:
delay := 200
Hotkey, If, TimeTest(delay) ; создаём контекст для всех созданных ниже горячих клавиш
; контекст заключается в том, что клавиши будут срабатывать
; только если функция TimeTest() вернёт true
Loop 249 { ; создаём горячие клавиши на все возможные виртуальные коды, т. е. на всю клавиатуру
key := Format("*vk{:X}", A_Index + 6)
Hotkey, % key, Stop, On ; если выполнится вышеуказанный контекст
} ; горячая клавиша выполит свою метку Stop и больше ничего не будет делать
Stop() { ; метка Stop, которая ничего не делает, т. е. просто блокирует клавишу
}
TimeTest(delay) { ; функция, проверяющая, прошёл ли таймаут с прошлого нажатия
static prevKey, prevTime
time := A_TickCount
if (A_ThisHotkey = prevKey && (time - prevTime) < delay)
stop := true ; если таймаут не прошёл, stop будет равно true, если прошёл — пустому значению
prevKey := A_ThisHotkey, prevTime := time
Return stop
}
#If TimeTest(delay) ; запись контекта в обычной форме (требование синтаксиса)
Разработка AHK-скриптов:
e-mail
dfiveg@mail.ruTelegram
jollycoder