So unterbrechen Sie eine Autohotkey-Schleife beim Schließen der App

So unterbrechen Sie eine Autohotkey-Schleife beim Schließen der App

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

verwandte Informationen