Skript abbrechen aber nicht beenden

  • Hallo,
    gibt es eine Möglichkeit ein Skript an einer beliebigen Stelle per Button anzuhalten? Es soll aber nicht via Exit komplett beendet werden.
    Mein Skript enthält ca. 10 Funktionen. In der zugehörigen GUI habe ich einen Button "Stop" der das Skript unterbrechen soll, und zwar in jeder beliebigen Funktion.

    Muss ich dazu an jeder Ecke meines Skripts ein Return bzw. ExitLoop einbauen oder kann man das einfacher lösen??

    Einmal editiert, zuletzt von kunig (16. März 2011 um 15:02)

  • Da mein Skript fast 800 Zeilen umfasst ist das wohl etwas zu viel.
    Im Prinzip sind es aber nur besagte Funktionen, die aus While, For und If bestehen, also nichts außergewöhnliches.

    Also:

    [autoit]

    Func bla()
    If
    While
    If
    .....
    EndFunc

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

    Func blabla()
    For
    If
    ....
    EndFunc

    [/autoit]


    Und die GUI besteht eigentlich nur aus einem Indikator der mir anzeigt ob gerade eine Funktion abläuft oder nicht und einem Button mit dem ich eben diese Funktion beliebig stoppen/verlassen will.

  • Um das Script zu Pausieren habe ich das hier aus der Deutschen Hilfe.

    Spoiler anzeigen
    [autoit]

    ; Drücke Esc um das Skript zu beenden, Pause um es zu pausieren

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

    Global $Paused
    HotKeySet("{PAUSE}", "TogglePause")
    HotKeySet("{ESC}", "Terminate")
    HotKeySet("+!d", "ShowMessage") ; Shift-Alt-d

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

    ;;;; Hier ist der Hauptteil des Programms ;;;;
    While 1
    Sleep(100)
    WEnd
    ;;;;;;;;

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

    Func TogglePause()
    $Paused = NOT $Paused
    While $Paused
    sleep(100)
    ToolTip('Script ist pausiert',0,0)
    WEnd
    ToolTip("")
    EndFunc

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

    Func Terminate()
    Exit 0
    EndFunc

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

    Func ShowMessage()
    MsgBox(4096,"","Das ist eine Nachricht.")
    EndFunc

    [/autoit]


    Ich hoffe das kann dir weiter Helfen :)

  • Danke, aber pausieren hilft mir nichts, ich will Funktionen abbrechen.
    Ich habe mir einen Workaround gebastelt: Der Stop-Button startet meine .exe einfach ein zweites Mal und beendet gleichzeitg das laufende Skript komplett per Exit. Also ein heimlicher Neustart des Skripts von dem der Benutzer nur ein kurzes Flackern sieht (wenn überhaupt).
    Das erfüllt zwar optisch seinen Zweck aber ne saubere Lösung wäre mir natürlich lieber.

  • Also erst mal - Soll das ein Spielebot werden ?
    Dein Script hat also 800 Zeilen Code, du bist seit heute registriert und weißt bei 800 Zeilen code nicht wie man so etwas macht ?
    Das grenzt an geniale Intelligernzallergik.

    Poste bitte das Script um den Verdacht gegen Bots zu beenden !

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Also erst mal - Soll das ein Spielebot werden ?
    Dein Script hat also 800 Zeilen Code, du bist seit heute registriert und weißt bei 800 Zeilen code nicht wie man so etwas macht ?
    Das grenzt an geniale Intelligernzallergik.

    Poste bitte das Script um den Verdacht gegen Bots zu beenden !

    Das sagt der richitge.

    Um eine Funktion abszubrechen gibt es :

    [autoit]

    Return

    [/autoit]


    Einfach in der Funkton an speziellen stellen überprüfen ob stop oder was auch immer gedruck wurde und dann per Return die Funktion beenden.

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Darter ich weiß meine schmutzige Vergangenheit wirft kein goldenes Licht auf mich, trotzdem möchte ich das Script sehen, wir haben doch hier nichts zu verbergen ?
    Er meinte übrigens, nur um dich auf den Stand zu bringen, er will die aktuelle .exe beenden und die neue starten ;)

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Darter: Return ist mir durchaus bekannt, ich hatte aber gehofft man kann das einfacher lösen. So muss ich an allen möglichen Stellen eine Abfrage einbauen... aber hilft wohl nichts ;)

    @Mattthias: Es ist kein Spielebot. Das Skript steuert in meiner Firma eine Kundensoftware an einem Messaufbau. Ich bediene diese Kundensoftware mit AutoIt damit niemand stundenlang davorsitzen und rumklicken muss.
    Ich habe jetzt schon länger in diesem Forum mitgelesen und ich finds bisschen lächerlich dass in jedem zweiten Thread gleich ein Bot vermutet wird. :thumbdown: Es gibt auch Leute die einen PC zu sinnvolleren Dingen nutzen als zocken. :whistling:

  • Zitat

    Darter: Return ist mir durchaus bekannt, ich hatte aber gehofft man kann das einfacher lösen. So muss ich an allen möglichen Stellen eine Abfrage einbauen... aber hilft wohl nichts ;)


    Kommt ganz darauf an wie der aufbau ist

    Zitat

    @Mattthias: Es ist kein Spielebot. Das Skript steuert in meiner Firma eine Kundensoftware an einem Messaufbau. Ich bediene diese Kundensoftware mit AutoIt damit niemand stundenlang davorsitzen und rumklicken muss.
    Ich habe jetzt schon länger in diesem Forum mitgelesen und ich finds bisschen lächerlich dass in jedem zweiten Thread gleich ein Bot vermutet wird. :thumbdown: Es gibt auch Leute die einen PC zu sinnvolleren Dingen nutzen als zocken. :whistling:


    Nun, ich denke dass muss man hinnehmen da es viele versuchen. Man Sollte halt einfach Ncith böse sein falls halt mal der Verdacht fällt, sondern in ruhe das Script posten und denen Beweissen die Bot versuche vermuten, das es ebend Kein Bot ist :P *Man wasn Satz >_<*
    Zu dem:

    Zitat

    Da mein Skript fast 800 Zeilen umfasst ist das wohl etwas zu viel.


    da gibt es eine Einfache Lösung, den Spoiler :D

    Spoiler Code

    (spoiler)(/spoile) [ ] anstelle von ( )

    Skilkor

  • Es ist nicht lächerlich, ohne diesen "schutz" hätten wir hier immer wieder Kiddies mit ihren H4CKS

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Es ist kein Spielebot. Das Skript steuert in meiner Firma eine Kundensoftware an einem Messaufbau. Ich bediene diese Kundensoftware mit AutoIt damit niemand stundenlang davorsitzen und rumklicken muss.


    Genau dafür gibt es unter Umständen bessere (weil zuverlässigere) Lösungen, dazu benötigen wir aber mehr Infos, gerad in diesem Bereich sind einige User sehr aktiv, man könnte auch sagen sie haben richtig Power.


    Ich habe jetzt schon länger in diesem Forum mitgelesen und ich finds bisschen lächerlich dass in jedem zweiten Thread gleich ein Bot vermutet wird. :thumbdown: Es gibt auch Leute die einen PC zu sinnvolleren Dingen nutzen als zocken. :whistling:

    Das liegt wohl daran, dass du die "bösen" Suchbegriffe verwendest, z.B.: wie man Mäuse schubst, Farben erkennt etc. In den Fällen in denen ich denen ich wegen Verdacht einen Thread deaktiviere dürfte ich eine Trefferquote von >90 % haben, aber auch ich bin schon von einem "Ungeborenen" hereingelegt worden, wie mir gelegentliche Besuche in einem anderen Forum gezeigt haben, dort liest man dann die Leute die es hier vergeblich versucht haben, seltsamerweise bekommen sie dort auch nur vernünftigen Support wenn sie a) die Grundlagen von AutoIt beherschen und b) bereit sind alle notwendigen Infos bereitzustellen

    mfg autoBert

  • Zitat

    Ich habe jetzt schon länger in diesem Forum mitgelesen und ich finds bisschen lächerlich dass in jedem zweiten Thread gleich ein Bot vermutet wird. :thumbdown: Es gibt auch Leute die einen PC zu sinnvolleren Dingen nutzen als zocken. :whistling:

    ehrlich gesagt, verarschen kann ich mich alleine!
    Du schreibst 800 Zeilen Code für die Steuerung einer Firmensoftware, das dazu nötige Wissen hast du dir (da erst heute hier angemeldet) autodidaktisch angeeignet. Soweit nix besonderes, das könne viele, gerade mit Hinblick auf die exzellente deutsche Hilfe.
    Deine Software debuggen können musst du auch, ansonsten würden deine Mitarbeiter sie wohl kaum einsetzen. Ein gewisser Stand an Kentniss ist also vorrauszusetzen.

    Und dann entsteht das "Problem", eine Funktion vorzeitig abzubrechen!? Aus der Hilfe zu FUNC kopiert:

    Zitat von Hilfe zu FUNC()

    Mit dem Schlüsselwort Return wird die Funktion verlassen. Im Gegensatz zu den eingebauten Funktionen geben benutzerdefinierte Funktionen immer 0 zurück, sofern kein anderer Returnwert gesetzt wurde.


    Man erlaube, dass ich so jemanden absolut nicht ernst nehmen kann...wer schon "länger in diesem Forum mitliest" und die Problematik solch dumpf gestellter Fragen ohne posten von Code nicht kapiert, dem kann ich auch nicht weiterhelfen!

    /EDIT/ "Script abbrechen aber nicht beenden"....war ggf. "Script pausieren" zu schwierig, da hätte die Sufu auch hunderte Threads ausgespuckt.

    autoBert
    Da er nach eigenen Angaben schon länger mitliest, ist ihm die Verwendung weit besserer Methoden als "Mausschubsen" natürlich bekannt! In jedem Thread, der sich mit Fernsteuerung von Software befasst, wird darauf hingewiesen und reichlich funktionierende Beispiele gibts auch. Ich hab nichts gegen Anfänger, aber bevor jemand 800 Zeilen Code schreibt, gehe ich davon aus, dass er sich wenigstens annähernd mit der Problemlösung befasst.... ;)

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    2 Mal editiert, zuletzt von Andy (16. März 2011 um 10:45)

  • @ Andy: Ich gebe dir in vielerlei hinsichten recht. Doch ich denke es ist oder wahr, nicht der sinn des Threads hier über Fehler von Usern zu debatieren :D
    Deswegen schlage ich vor das man nun einfach mal den Thread schreiber abwarten bis der code vorhanden ist.
    Tips und trinks und Hinweise wurde ja zugenüge dargestellt wie er
    1: Die "800" Zeilen Code Posten kann
    2: Functionen Abbrechen kann
    3: sein script evt Debuggen kann

    Skilkor

  • Andy: Du solltest erstmal den Thread ordentlich lesen bevor du mich hier dumm anmachst. Es geht nicht darum ein Skript zu pausieren sondern abzubrechen und zwar an jeder beliebigen Stelle. Ich will halt nicht an jeder Ecke meines Codes ein Return einbauen, weils einfach ne Menge Arbeit ist. Deshalb die Frage ob es irgendwie einfacher geht. Allerdings erfüllt mein Workaround vorerst auch seinen Zweck.

  • @kunig:

    Andy: Du solltest erstmal den Thread ordentlich lesen bevor du mich hier dumm anmachst.


    1: So Spricht man mit PowerUsern nicht!

    Ich will halt nicht an jeder Ecke meines Codes ein Return einbauen, weils einfach ne Menge Arbeit ist. Deshalb die Frage ob es irgendwie einfacher geht.


    2: Dies zu beantworten ist wie schon mehreremale Gesagt worden, schwierig ohne Script

    Edit:
    SuperUser zu powerUser (Wasn Fail) X(

    Einmal editiert, zuletzt von Skilkor (16. März 2011 um 15:40)

  • Es geht nicht darum ein Skript zu pausieren sondern abzubrechen und zwar an jeder beliebigen Stelle.


    Ein Skript das abgebrochen wird ist auch beendet, dies widerspricht aber dem 2. Teil deiner Überschrift. Zum vorzeitigen Beenden einzelner Funktionen benutzt man return am besten mit einem Returncode und evtl. noch @Error setzen, damit die aufrufende Funktion weis was Sache ist/war und nicht von einem Erfolg einer benötigten Funktion ausgeht und danach das Skript zum Absturz bringt.

    Ein letzter Tipp noch, poste entweder dein Skript oder setze ihn auf gelöst. Einfach 1. Beitrag bearbeiten, Präfix (nähe Überschrift) ändern und speichern (absenden)

    mfg autoBert

    Einmal editiert, zuletzt von autoBert (16. März 2011 um 15:00)

  • Poste dein Script doch einfach, dann ist alles einfacher !
    Du beschimpfst uns hier, meinst 800 Zeilen Code zu haben aber nicht mal Befehle zu kennen die Grundlagen dafür sind ?
    Macht dein 800 Zeilen script etwa

    [autoit]


    MsgBox(0, "Spam", "1")
    ;...
    ;800
    MsgBox(0, "Spam", "800")

    [/autoit]


    Poste dein Script und dann ist Ruhe !

    Skilkor, es heisst "PowerUser", nicht "SuperUser"

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal