GUI buttons Abfrage in while od. for Schleife bricht bei select->case und exitLoop nicht aus der Schleife

  • Hallo Leute, ich habe ein Problem was ich nicht lösen kann.
    Ich fange erstmal damit an, zu beschreiben was ich realisieren möchte:

    - Es erscheint eine GUI mit Auswahl 2er Punkte, die sich nach 60 Sekunden Automatisch schliessen soll und dabei Automatisch eine Variable auf "1" setzt. Später wird diese Varaible dazu genutzt um zu entscheiden ob ein Program im Hintergrund offen bleibt oder geschlossen wird. Die 2 Buttons heissen einfach "Ja Programm schliessen" und "Nein, Programm offen lassen". Bei egal welcher Button Auswahl sollte sich die GUI sofort schliessen (und nicht die 60 Sekunden abwarten) und das Script normal weiter laufen.

    Ich habe es mit einer For und einer While Schleife versucht, einfach $i runter zählen zu lassen (mit Sleep(1000) im script) und bei beiden bleibt die GUI insgesamt offen, egal ob ich exitloop verwende oder nicht.

    Nutze ich aber eine Schleife mit "while [Bedingung größer 0 -> Also "Endlos")" funktioniert es und die GUI geht bei drücken eines Buttons sofort zu und das Script läuft weiter - hier funktioniert also der Schleifenausbruch.

    Mein Code rein für den 60 Sekunden Countdown:

    [autoit]


    local $i = 0
    while $i < $GUIclosetime ; Variable auf 60 Sek gesetzt am Anfang des Scripts
    $guimsg = GUIGetMsg()
    Select
    case $guimsg = -3
    Global $ProgrammCanBeClosed = 1
    exitloop
    case $guimsg = $GuiButton1
    Global $ProgrammCanBeClosed = 1
    exitloop
    case $guimsg = $GuiButton2
    Global $ProgrammCanBeClosed = 0
    exitloop
    EndSelect
    Sleep(1000)
    $i = $i + 1
    Global $ProgrammCanBeClosed =1
    WEnd
    GUISetState(@SW_HIDE, $MyGUI) ; "MyGUI ist der Handle meiner GUI"

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

    So, was nun passiert ist das folgende:
    Egal ob ich auf einen der Buttons oder das "x" der GUI klicke, die GUI bleibt insgesamt ihre 60Sekunden offen bevor sie selbst schliesst. Die Übergabe der Variablen funktioniert dagegen Richtig und wie gewünscht, d.h. nach 60 Sekunden Timeout ist " $ProgrammCanBeClosed" auf "1" und wenn ich auf "Button2" klicke ist sie auf "0" gesetzt.

    Jetzt habe ich natürlich auch versucht den code

    [autoit]

    GUISetState(@SW_HIDE, $MyGUI)

    [/autoit]


    in die einzelnen cases des "Select" zu packen, aber auch da bleibt die GUI offen.

    Und wie weiter oben genannt, nutze ich hingegen eine while Schleife beginnend á la:

    [autoit]

    while 1

    [/autoit]


    Funktioniert der Sofortige Schleifenausbruch und das Variablensetzen Problemlos, allerdings habe ich dann ja keinen Countdown von 60 Sekunden, der aber wirklich nötig ist - sonst brauche ich das ganze Script nicht...

    Wer hat ideen?

    1000 Dank schonmals :)
    Lg Christian

  • ziemlich sicher macht dein Sleep Probleme.
    Wie wärs , wenn du nen Timer verwendest.
    Außerdem kannst du einfacher ne Switch-Anweisung benutzen.
    Und es ist nicht gerade sinnvoll (eher das Gegenteil) Variablen in einer Schleife zu deklarieren.

    (Du könntest auch den On-Event-Modus benutzen)

  • ziemlich sicher macht dein Sleep Probleme.
    Wie wärs , wenn du nen Timer verwendest.
    Außerdem kannst du einfacher ne Switch-Anweisung benutzen.
    Und es ist nicht gerade sinnvoll (eher das Gegenteil) Variablen in einer Schleife zu deklarieren.

    (Du könntest auch den On-Event-Modus benutzen)

    Danke, hast du einen Code-Vorschlag für mich?

  • wenn du mal einen richtigen Code reinstellst vllt schon
    Und für was soll die $ProgramCanBeClosed sorgen.
    Poste doch mal den relevanten Teil (lauffähig) von deinem Skript