2013-04-24 23 views
6

Mit AutoHotKey habe ich ein ziemlich einfaches Loop-Skript, das ich durch den Strich eines Schlüssels brechen kann. Ich habe ein paar verschiedene Codes von Webseiten ausprobiert, aber es scheint nicht zu funktionieren.AutoHotKey Tastenanschlag break loop

Hier ist der Code:

#g:: 
Loop 20 
{ 
    MouseClick, left, 142, 542 
    Sleep, 1000 
    MouseClick, left, 138, 567 
    Sleep, 1500 
    MouseClick, left, 97, 538 
    Sleep, 1000 
} 

Antwort

1

eine globale Variable Hinzufügen könnte die einfachste Lösung für Ihren Fall sein, da die Schleife eine Weile in Anspruch nimmt.

global break_g = 0 

#b:: 
    break_g = 1 
return 


#g:: 
break_g = 0 
Loop 20 
{ 
    MouseClick, left, 142, 542 
    Sleep, 1000 
    MouseClick, left, 138, 567 
    Sleep, 1500 
    MouseClick, left, 97, 538 
    Sleep, 1000 
    if(break_g = 1) 
    { 
     return 
    } 
} 
return ; also you were missing this return 
+0

das funktioniert. Danke. Ein sofortiger Halt wäre das Beste, aber ich bin damit zufrieden. – Dave

+0

@Dave Setzen Sie einfach eine if-Anweisung vor jedem MouseClick. –

+0

macht Sinn, ich werde das versuchen. Vielen Dank nochmal – Dave

0
#g:: 
Loop 20 
{ 
    KeyWait,Ctrl,D T0 
     if Errorlevel = 0 
      break 
    MouseClick, left, 142, 542 
    KeyWait,Ctrl,D T0 
     if Errorlevel = 0 
      break 
    Sleep, 1000 
    KeyWait,Ctrl,D T0 
     if Errorlevel = 0 
      break 
    MouseClick, left, 138, 567 
    KeyWait,Ctrl,D T0 
     if Errorlevel = 0 
      break 
    Sleep, 1500 
    KeyWait,Ctrl,D T0 
     if Errorlevel = 0 
      break 
    MouseClick, left, 97, 538 
    KeyWait,Ctrl,D T0 
     if Errorlevel = 0 
      break 
    Sleep, 1000 
} 

return 

die oben kann hilfreich sein, da die Wirkung augenblicklich sein würde. In den meisten Fällen wird Ihre Schleife angehalten, wenn Sie die Strg-Taste für ein Intervall gedrückt halten.

+0

Sie haben Fehler in Ihrem Code. Sie müssen die Strg-Taste für die gesamte Dauer der Schlafzeit gedrückt halten, wenn Sie sie bei der Ausführung des Schlafs halten. Der Effekt ist also nicht unmittelbar. Sie haben den gleichen Befehl auch sechsmal dupliziert, Sie sollten sich nicht wiederholen (was, wenn OP den Hotkey ändern möchte, viel Glück, wenn Sie das 6 Mal machen). Und Sie wissen nicht, ob die ganze Schleife ein einzelner Befehl ist, der nicht unterbrochen werden sollte; mit meiner Methode können Sie immer noch eine if-Anweisung (wenn Sie wollen, das liegt an dem Benutzer) wann immer Sie wollen und eine Beendigung der Schleife erreichen. –

+0

@armin, ich kenne diesen Schlaffakt. (Also habe ich "öfter als gar nicht" benutzt) Auch meine Antwort war meistens fragmentspezifisch und nicht für die allgemeine Situation. (Da Daves Skript klein ist, kann ich mir die Wiederholung 6 mal leisten). und das ist nicht notwendig, dass ** break_g ** ein "global" ist. Ich sehe, dass du diesen Punkt in meinem Code bearbeitet hast. – Avi

+0

Ich habe das bearbeitet, da es ein Kommentar sein sollte. –

0

Das Umschalten der globalen Variablen ist der richtige Weg. Sie müssen es am Anfang des Skripts deklarieren.

global keep_working = 1; am Anfang des Skripts Pause auf Aus setzen

b ::; Set Pause auf keep_working = 0 zurück

g ::; arbeiten an und starten die Schleife keep_working = 1
Loop,; Schleife, bis b gedrückt wird (wurde Schleife 20 in ursprünglichem Code) { Mouse, links, 142, 542 Sleep, 1000 Mouse, links, 138, 567 Sleep, 1500 Mouse, links, 97, 538 Schlaf , 1000 if (keep_working = 0) { zurück; erforderlich, um die Ausführung zu stoppen } } zurückgeben; Dieses Trennzeichen wird am Ende der Hotkey-Prozedur benötigt.

2

Verwenden Sie eine globale Variable (keepCycling) und schalten Sie sie um, um die Schleife zu unterbrechen. Globale Variablen sollten am Anfang eines Skripts deklariert werden.