У меня есть autohotkey для многократного ввода некоторых нажатий клавиш в старый скрипт. Я не знаю заранее, как долго это будет продолжаться, поэтому у меня есть этот скрипт:
#NoEnv
^m::
Loop
{
if (BreakLoop = 1)
break
SEND, 3
SEND, {Enter}
SEND, {Enter}
SEND, {Enter}
SEND, {Enter}
sleep, 100
}
Esc::
BreakLoop = 1
return
И я жду, пока он закончится, и вхожу в режим выхода, когда он заканчивается (таймер сна есть, так что я действительно могу выйти).
Как только скрипт завершается, окно закрывается, и я хотел бы использовать это событие, чтобы разорвать цикл autohotkey, но пока не придумал, как это сделать.
решение1
Вы можете использовать WinActive или WinExist для проверки закрытия окна. Вы также можете использовать оператор while для объединения условных операторов break вместо необходимости в отдельном if/break. Я бы также убедился и инициализировал переменную BreakLoop на случай, если вы запустите скрипт несколько раз без его полного перезапуска.
#NoEnv
^m::
setTitleMatchMode, 2 ; inexact title match
myID := WinExist(myWinTitle:="A") ; put WinSpy title details here
BreakLoop = 0
While !BreakLoop and WinActive("ahk_id" myID)
{
SEND, 3
SEND, {Enter}
SEND, {Enter}
SEND, {Enter}
SEND, {Enter}
sleep, 100
}
Esc::
BreakLoop = 1
return