Programm "vorzeitig" beenden

  • Hi,

    angenommen eine while-Schleife führt 20 Durchgänge aus.
    Nach 10 Durchgängen klickt man auf Beenden.
    Dann wird trotzdem erst das Programm nach dem Ende der 20 Durchgänge beendet.
    Wie kann man schon vorher auf dem Eventhandler prüfen bzw. das Programm beenden?

    Grüße und Danke

    Guido

  • Hm,

    in der Hilfe finde ich nur AdlibEnable("Funktion"), aber mit dem Beispiel komme ich nicht klar.

    Ein Beispiel sagt mehr als 1000 Worte.
    Das Beispielprogramm macht 10 Wiederholungen. Wenn man das Programm nach 5 Läufen beenden möchte, passiert nichts, bis die 10 Läufe durch sind.

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    ;Fenster erstellen
    GUICreate("Programm vorzeitig beenden", 520, 360)
    GUISetBkColor("0xFFFFCA")
    GUISetFont(9, 400, 0, "Arial")

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

    Global $lauf
    ;Fenster aufrufen
    GUISetState(@SW_SHOW)

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

    GUICtrlCreateLabel("Anzahl Läufe: 10", 10, 40)
    $lauf = GUICtrlCreateLabel("Lauf:", 10, 80,100,20)
    _repeat()

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

    $msg = 0
    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd

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

    Func _repeat()
    Local $i
    for $i = 0 to 10
    guICtrlSetData($lauf,"Lauf: " & $i)
    sleep (1000)
    Next
    EndFunc

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

    Exit

    [/autoit]
    • Offizieller Beitrag
    Beispiel
    [autoit]

    Global $count = 0, $max = 20 ; $max ist die maximale Anzahl der Durchläufe (Aufrufe)
    AdlibEnable('_msg', 1000) ; alle 1000 ms wird das Programm aufgerufen
    HotKeySet('!e', '_ende') ; Hotkey zum vorzeitigen Beenden: ALT + e

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

    While 1
    Sleep(100)
    WEnd

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

    Func _msg()
    $count += 1
    ConsoleWrite('Message #' & $count & @CRLF)
    If $count = $max Then
    AdlibDisable()
    Exit
    EndIf
    EndFunc

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

    Func _ende()
    ConsoleWrite("vorzeitig beendet" & @CRLF)
    AdlibDisable()
    Exit
    EndFunc

    [/autoit]
  • Ich habe das jetzt mal in mein Demo-Programm umgesetzt, aber mit der Lösung erreiche ich immer noch nicht mein Ziel :(
    Mit Alt+e kann ich zwar den Lauf unterbrechen, der nach dem Klick auf der Gui aber weiter läuft. Auch wird ein erneutes Drücken des Start-Buttons dabei ignoiert.
    Außerdem ruft "AdlibEnable" die Funktion "repeat" nach ihrem Durchlauf immer wieder erneut auf.

    Mein eigentliches Ziel erreiche ich aber immer noch nicht.
    a) ein wirklicher Abbruch der Funktion
    b) nach der "Unterbrechung" der Funktion, die Möglichkeit haben das Programm zu beenden

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    ;Fenster erstellen
    GUICreate("Programm vorzeitig beenden", 520, 360)
    GUISetBkColor("0xFFFFCA")
    GUISetFont(9, 400, 0, "Arial")

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

    Global $lauf
    ;Fenster aufrufen
    GUISetState(@SW_SHOW)

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

    HotKeySet('!e', '_ende') ; Hotkey zum vorzeitigen Beenden: ALT + e

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

    GUICtrlCreateLabel("Anzahl Läufe: 10", 10, 40)
    $lauf = GUICtrlCreateLabel("Lauf:", 10, 80,100,20)
    $btn_Start = GUICtrlCreateButton("Start", 270, 50, 60, 20)

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

    $msg = 0
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $btn_Start
    AdlibEnable('_repeat', 1000)
    EndSelect

    WEnd

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

    Func _repeat()
    Local $i
    for $i = 0 to 10
    guICtrlSetData($lauf,"Lauf: " & $i)
    sleep (1000)
    Next
    EndFunc

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

    Func _ende()
    ConsoleWrite("vorzeitig beendet" & @CRLF)
    AdlibDisable()
    EndFunc

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

    Exit

    [/autoit]
  • Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    ;Fenster erstellen
    GUICreate("Programm vorzeitig beenden", 520, 360)
    GUISetBkColor("0xFFFFCA")
    GUISetFont(9, 400, 0, "Arial")

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

    Global $lauf, $count = 1
    ;Fenster aufrufen
    GUISetState(@SW_SHOW)

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

    HotKeySet('!e', '_ende') ; Hotkey zum vorzeitigen Beenden: ALT + e

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

    GUICtrlCreateLabel("Anzahl Läufe: 10", 10, 40)
    $lauf = GUICtrlCreateLabel("Lauf:", 10, 80,100,20)
    $btn_Start = GUICtrlCreateButton("Start", 270, 50, 60, 20)

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

    $msg = 0
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $btn_Start
    AdlibEnable('_repeat', 1000)
    EndSelect

    WEnd

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

    Func _repeat()
    guICtrlSetData($lauf,"Lauf: " & $count)
    $count += 1
    If $count = 10 Then AdlibDisable()
    EndFunc

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

    Func _ende()
    ConsoleWrite("vorzeitig beendet" & @CRLF)
    AdlibDisable()
    EndFunc

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

    Exit

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    über mich...

    ich habe meine Erfahrungen hauptsächlich gesammelt in (grobe Übersicht):

    - RibbonBar Automation
    - MySQL Nutzung
    - GUIs in vielerlei Ausprägung
    - Nutzung von Powershell / Batch in AutoIt
    - Windows Automatisierung

    außerhalb von AutoIt:

    - Sprachen: PS, Batch, php, html(5), javascript, (perl eingeschränkt), vbs
    - Powershell (AD, WPF inkl. Multi-Threading, ...)
    - Deployment-Automatisierung ohne SCCM
    - Office-Nutzung mit COM-Object (AutoIt, PowerShell)
    - ActiveDirectory und alles was damit zusammenhängt
    - Hyper-V Clustering (Converged / Hyper Converged)
    - Serverhardware (Konfiguration, Aufbau, Architektur, Betrieb)

    Lieblingsthema:

    günstige Automatisierung von Vorgängen, für die andere Firmen viel Geld nehmen

    more to come ...