Laufende Funktion beenden

  • Hallo.

    Ich will eine laufende Funktion durch einen Tastendruck beenden.
    Meine Idee war Return.. aber das klappte nicht.

    HIer mein Programm:

    Spoiler anzeigen
    [autoit]

    HotKeySet("{ESC}", "Terminate")

    [/autoit] [autoit][/autoit] [autoit]

    Func Terminate()
    Return
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func 2teFunktion()
    MouseClick("left",$x1,$y3,1,$s)
    MouseClick("left",$x2,$y3,1,$s)
    EndFunc

    [/autoit]

    [

    Die Idee ist, dass die 2teFunktion einfach gestoppt wird wenn ich ESC drücke.
    Doch soll das Programm dabei nicht geschlossen werden.

    Wie geh ich hier am besten ran?

    Einmal editiert, zuletzt von geradeStudent (25. Januar 2012 um 17:22)

  • 1. Funktionsnamen dürfen nicht mit einer Zahl anfangen ;)

    dein problem ist das er zwar in die funktion spring die funktion auch ausführt, dann aber weiter im skript geht ;)

    gibt mehre ansätze die du jetzt verfolgen kannst.

    eine pause funktion:

    Spoiler anzeigen
    [autoit]

    HotKeySet("{Pause}","_pause")
    Global $pause = False

    [/autoit] [autoit][/autoit] [autoit]

    Func _pause()
    $pause = Not $pause
    While $pause
    Sleep(10)
    WEnd
    EndFunc

    [/autoit]

    oder eine abfrage von einer Variablen, die mit deiner Stop Funktion setzt und diese dann überprüfst.
    Ist definitv nicht die schönste variante!

    Spoiler anzeigen
    [autoit]

    HotKeySet("{Pause}","Stop")
    Global $Stop = False

    [/autoit] [autoit][/autoit] [autoit]

    Func Stop()
    $Stop = true
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _2teFunktion()
    $Stop = False
    MouseClick("left",$x1,$y3,1,$s)
    if $Stop then Return
    MouseClick("left",$x2,$y3,1,$s)
    if $Stop then Return
    EndFunc

    [/autoit]

    ansonsten fällt mir da auch nichts ein

  • Stell dein richtiges Skript ein, denn bei diesem beendet sich die Funktion nach den 2 Mausklicks von alleine. Noch besser ist du nennst das Porg das du automatisieren willst, denn meist gibt es bessere Möglichkeiten als Mausschubser- und -klickerei,

    mfg autoBert

  • Deinen Vorschlag mit der Pause habe ich so realisiert. Viele Dank dafür, wobei dies ja auch nur die Funktion "pausiert". Schöner fände ich es, wenn sie ganz beendet werden würde. Ohne nach der Pause weiter zu gehen. Ist dies möglich?

    Spoiler anzeigen
    [autoit]

    Global $Paused
    HotKeySet("{F1}", "TogglePause")

    [/autoit] [autoit][/autoit] [autoit]

    Func TogglePause()
    $Paused = NOT $Paused
    While $Paused
    Sleep(50)
    ToolTip('Script is "Paused"',0,0)
    WEnd
    ToolTip("")
    EndFunc

    [/autoit]


    Stell dein richtiges Skript ein, denn bei diesem beendet sich die Funktion nach den 2 Mausklicks von alleine. Noch besser ist du nennst das Porg das du automatisieren willst, denn meist gibt es bessere Möglichkeiten als Mausschubser- und -klickerei,

    mfg autoBert

    Es gibt noch kein Script, was ich dir präsentieren könnte. Ich habe einfach nur schnell versucht zu zeigen, was ich vorhabe.
    Wegen meiner Frage, ist es auch nicht relevant, ob die Funktion 2 Klicks macht, oder 30 Variablen ausliest und 70 Pakete sendet.
    Vielleicht will ich diese 2 Klicks, nach denen sich die Funktion beendet nicht? ;)

    Liebe Grüße, geradeStudent

  • warum nicht so?

    [autoit]


    #include <Misc.au3>

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    While 1
    Sleep(1)
    If _IsPressed("08") Then
    _diefunktion()
    EndIf
    If _IsPressed("13") Then
    _endfunktion()
    EndIf
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func _diefunktion()
    MsgBox(0,"","Toll du kannst tasten drücken")
    EndFunc
    Func _endfunktion()
    MsgBox(0,"","Alles hat ein Ende nur die Wurst hat zwei.")
    Exit
    EndFunc

    [/autoit]

    I spent 10 minutes reviewing code and thinking "What kind of drugs is this guy on?" before realizing it was something I wrote.

  • Wenn das nur ein paar Mausbewegungen sind würd ich das so lösen

    [autoit]


    Global $Terminate = False

    [/autoit][autoit][/autoit][autoit]

    HotKeySet("{ESC}", "Terminate")
    HotKeySet("^s", "Funktion")

    [/autoit][autoit][/autoit][autoit]

    Func Terminate()
    $Terminate = True
    EndFunc ;==>Terminate

    [/autoit][autoit][/autoit][autoit]

    Func Funktion()
    For $i = 1 To 6
    If $Terminate = True Then Return
    Select
    Case $i = 1
    MouseMove(100, 100)
    Case $i = 2
    MouseMove(200, 100)
    Case $i = 3
    MouseMove(300, 100)
    Case $i = 4
    MouseMove(400, 100)
    Case $i = 5
    MouseMove(500, 100)
    Case $i = 6
    MouseMove(600, 100)
    EndSelect
    Sleep(2000)
    Next
    EndFunc ;==>Funktion

    [/autoit][autoit][/autoit][autoit]

    While True
    Sleep(10)
    $Terminate = False
    WEnd

    [/autoit]

    Unschön aber es tut bei mir

    Die Laufende Mausbewegung kann jedoch nicht unterbrochen werden so sprich man kann so nur zwischen den Zeilen Unterbrechen

    Ansonsten kenn ich nur noch die Möglichkeit ne exe zu machen die die Maus steuert und die Koordinaten per Parameter zu übergeben
    Bei ESC einfach den Prozess abschiessen :pinch: