Ich habe einen Autohotkey, um in einem alten Skript immer wieder einige Tastenanschläge einzugeben. Da ich vorher nicht weiß, wie lange das dauern wird, habe ich dieses Skript:
#NoEnv
^m::
Loop
{
if (BreakLoop = 1)
break
SEND, 3
SEND, {Enter}
SEND, {Enter}
SEND, {Enter}
SEND, {Enter}
sleep, 100
}
Esc::
BreakLoop = 1
return
Und ich warte, bis es fertig ist, und drücke „Escape“, wenn es fertig ist (der Sleep-Timer ist da, damit ich tatsächlich entkommen kann).
Sobald das Skript fertig ist, schließt sich das Fenster, und ich möchte dieses Ereignis nutzen, um die Autohotkey-Schleife zu unterbrechen, habe aber noch nicht herausgefunden, wie das geht.
Antwort1
Sie können WinActive oder WinExist verwenden, um zu prüfen, ob das Fenster geschlossen wird. Sie können auch eine while-Anweisung verwenden, um die bedingten Break-Anweisungen zu kombinieren, anstatt ein separates if/break zu benötigen. Ich würde auch sicherstellen, dass die Variable BreakLoop initialisiert wird, falls Sie das Skript mehrmals ausführen, ohne es vollständig neu zu starten.
#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