Case Schritt wechseln

  • Hallo zusammen,


    ich bin ein vollkommener Neuling und hab bei nem Programm, das ich mir zusammen gewurschtelt hab ein Problem. Dieser Case fall 1 läuft wie eine Schleife durch und macht
    immer eine bestimmte Zeit Pause. Die Schleife wird solange durchlaufen bis der vorhereingestellte Wert einer Variable ($Anzahl) erreicht ist. Jetzt möchte ich allerdings die schleife schon
    vorher unterbrechen z.B wenn man das GUI schließt oder den stopp Knopf drückt. In meinem Programm geht das aber nicht. Läuft die schleife und ich betätige den stopp Knopf passiert gar nichts.
    Eigentlich sollte das Programm in einen andern case Schritt springen ($zaehler =0). Betätige ich das „X“ passiert zunächst auch nichts, erst wenn alle Durchläufe vorbei sind geht dann das
    Fenster zu wie ein quasi „ gespeichertes“ Kommando. Die schleife hört jedoch mit dem Zustand $count = § Anzahl auf also wenn ich weder stopp noch das "x" drücke. Die zeile ;if $count <= $Anzahl Then brauch ich nicht.
    Mir kommst so vor als würden die Befehle $msg = $btn_Stopp und $msg = $GUI_EVENT_CLOSE erst bearbeitet werden wenn $count = $Anzahl eintrifft. Irgendwie muss ich
    doch vorher aus dem case schritt aussteigen können.


    Ich danke schon mal im voraus.


    Gruß


    J.K.

  • Danke für die schnellen Antworten,

    also das mit dem exitloop geht nicht hab ich vorher schon mal versucht. HIer mal der komplette code aber nicht schimpfen ;)


  • Versuch mal das hier

    [autoit]

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

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

    GUICreate("irgendwas", 360, 570)
    GUISetBkColor("0xFFFFCA")
    GUISetFont(9, 400, 0, "Arial")

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

    Global $count = 0 , $Start = 0, $Anzahl = 0, $MaxVarianz = 0 , $Basiszeit = 0 , $Varianz = 0 ; $Gesamttzeit = $Basiszeit + $Varianz
    Global $Tastatur = 0 , $Maus = 0 , $Random = 0 , $CD = 0 , $VarianzVoll = 0 ,$zaehler = 0

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

    ;Fenster aufrufen
    GUISetState(@SW_SHOW)

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

    HotKeySet( '{F2}', '_ende') ; Hotkey zum vorzeitigen Beenden: ALT + e

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

    $lbl_count = GUICtrlCreateLabel("Versuche bisher:", 10, 50,200,20)
    $lbl_Ist = GUICtrlCreateLabel("IST", 130, 90, 200, 40)
    $lbl_Soll = GUICtrlCreateLabel("Soll", 280, 90, 200, 40)
    $lbl_Anzahl = GUICtrlCreateLabel("Anzahl Läufe:", 10, 120, 200, 40)
    $lbl_Basiszeit = GUICtrlCreateLabel("Basiszeit:", 10, 160,200,40)
    $lbl_Varianz = GUICtrlCreateLabel("Varianz (größer 300):", 10, 200,200,40)
    $lbl_Gesamtzeit = GUICtrlCreateLabel("Gesamtzeit:", 10, 240,200,40)
    $lbl_zeit_laufend = GUICtrlCreateLabel("Zeit zum nächsten click:", 10, 280,200,40)

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

    $lbl_Testfeld = GUICtrlCreateLabel("Cursor in das Testfeld:", 10, 370,200,40)
    $lbl_Testbutton = GUICtrlCreateLabel("Cursor auf den Testbutton:", 10, 330,200,40)

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

    $lbl_Tastatur = GUICtrlCreateLabel("Eingabe 1 für Tastatur (1 Taste):", 10, 460,200,40)
    $lbl_Maus = GUICtrlCreateLabel("Eingabe 1 für Maus:", 10, 500,200,40)
    $lbl_Random = GUICtrlCreateLabel("Eingabe 1 für Random:", 10, 540,200,40)
    $lbl_Aktiv = GUICtrlCreateLabel("Nur eins kann aktiv sein!", 10, 420,200,40)

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

    $Input1 = GUICtrlCreateInput("", 260, 120, 70, 20)
    $Input2 = GUICtrlCreateInput("", 260, 160, 70, 20)
    $Input3 = GUICtrlCreateInput("", 260, 200, 70, 20)

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

    $Input4 = GUICtrlCreateInput("", 260, 380, 70, 20)
    $Input5 = GUICtrlCreateInput("0", 260, 460, 70, 20)
    $Input6 = GUICtrlCreateInput("0", 260, 500, 70, 20)
    $Input7 = GUICtrlCreateInput("0", 260, 540, 70, 20)

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

    $btn_Start = GUICtrlCreateButton("Start", 110, 10, 60, 20)
    $btn_Stopp = GUICtrlCreateButton("Stopp", 190, 10, 60, 20)
    $btn_NULL = GUICtrlCreateButton("NULL", 270, 10, 60, 20)
    $btn_Test = GUICtrlCreateButton("Test", 260, 330, 60, 20)

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

    guICtrlSetData($lbl_count,"Versuche bisher: " & $count)
    guICtrlSetData($lbl_Anzahl,"Anzahl Läufe: " & $Anzahl )
    guICtrlSetData($lbl_Basiszeit,"Basiszeit: " & $Basiszeit )
    guICtrlSetData($lbl_Varianz,"Varianz (größer 300): " & $Varianz )
    guICtrlSetData($lbl_zeit_laufend,"Zeit zum nächsten click: " & $CD)
    ;guICtrlSetData($lbl_Gesamtzeit,"Gesamtzeit: " & $Gesamtzeit)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()

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

    if $msg = $GUI_EVENT_CLOSE then
    Exit
    EndIf

    Switch $zaehler
    Case 0 ;Initialschritt
    if $msg = $btn_Start Then
    $zaehler = $zaehler +1
    endif

    if $msg = $btn_NULL Then
    $count = 0
    $start = 0
    $Anzahl = 0
    $Basiszeit = 0
    $Varianz = 0

    guICtrlSetData($lbl_count,"Versuche bisher: " & $count)
    guICtrlSetData($lbl_Anzahl,"Anzahl Läufe: " & $Anzahl )
    guICtrlSetData($lbl_Basiszeit,"Basiszeit: " & $Basiszeit )
    guICtrlSetData($lbl_Varianz,"Varianz (größer 300): " & $Varianz )

    EndIf

    Case 1

    $Anzahl = GUICtrlRead($Input1)
    $Basiszeit = GUICtrlRead($Input2)
    $MaxVarianz = GUICtrlRead($Input3)
    $Tastatur = GUICtrlRead($Input5)
    $Maus = GUICtrlRead($Input6)
    $Random = GUICtrlRead($Input7)
    guICtrlSetData($lbl_Anzahl,"Anzahl Läufe: " & $Anzahl)
    guICtrlSetData($lbl_Basiszeit,"Basiszeit: " & $Basiszeit)

    ;if $count <= $Anzahl Then
    $count = $count +1
    $VarianzVoll = Random (300, $MaxVarianz,0)
    $Varianz = Round($VarianzVoll,3)
    $Gesamtzeit = $Basiszeit + $Varianz
    Sleep ($Gesamtzeit)

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

    guICtrlSetData($lbl_count,"Versuche bisher: " & $count)
    guICtrlSetData($lbl_Gesamtzeit,"Gesamtzeit: " & $Gesamtzeit)
    guICtrlSetData($lbl_Varianz,"Varianz (größer 300): " & $Varianz)

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

    if $msg = $btn_Stopp Then
    $zaehler = 0
    $count = $Anzahl
    EndIf

    If $count = $Anzahl Then
    $zaehler = 0
    EndIf

    $CD = $Gesamtzeit -1
    guICtrlSetData($lbl_zeit_laufend,"Zeit zum nächsten click: " & $CD)
    ;Endif

    EndSwitch
    WEnd

    [/autoit]
  • Also ich versteh zwar nicht, was es mit dem Zähler auf sich hat, aber erstmal musst du deine GUI richtig aufbauen.
    GUISetState kommt immer erst nachdem du die GUI und die Controls erstellt hast. Dann machst du erstmal die GUIGetMsg-Schleife fertig mit den Buttons und den GUI-Events, sodass alles funktioniert und auch eine Struktur erkennbar ist. Und dann erst machst du die Funktionen und Abläufe. So kommt du während des Programmierens auch nicht durcheinander und werkelst da ein bisschen und dann da ein bisschen.

    Bei dem Script von rynow kannste das erste GUISetState entfernen.

  • sorry ich habe grad keine Zeit deine GUI aufzuräumen und korrekt zu gestalten, dein Fehler war, dass du $msg auf null gesetzt hast.

    [autoit]

    $msg = 0

    [/autoit]

    Ich empfehle dir zudem die AutoIt IDE von "ISN Studio" dort hast du ein wirklich guten GUI Builder. Diese IDE kann ich wirklich jeden Anfänger empfehlen-

    @m-obi vielen Dank, habe übersehen, dass der State berreits oben gesetzt war. Bzw. ist dieser in diesem Fall garnicht notwendig.

  • Also so wäre erstmal der Aufbau, damit auch alle Controls und Events abgefragt werden können und du die GUI auch schliessen kannst.

    Spoiler anzeigen
    [autoit]

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

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

    HotKeySet("{F2}", "_Exit")

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

    GUICreate("irgendwas", 360, 570)
    GUISetBkColor("0xFFFFCA")
    $lbl_count = GUICtrlCreateLabel("Versuche bisher: 0", 10, 50, 200,20)
    $lbl_Ist = GUICtrlCreateLabel("IST", 130, 90, 200, 17)
    $lbl_Soll = GUICtrlCreateLabel("Soll", 280, 90, 200, 17)
    $lbl_Anzahl = GUICtrlCreateLabel("Anzahl Läufe: 0", 10, 120, 200, 17)
    $lbl_Basiszeit = GUICtrlCreateLabel("Basiszeit: 0", 10, 160, 200, 17)
    $lbl_Varianz = GUICtrlCreateLabel("Varianz (größer 300): 0", 10, 200, 200, 17)
    $lbl_Gesamtzeit = GUICtrlCreateLabel("Gesamtzeit:", 10, 240, 200, 17)
    $lbl_zeit_laufend = GUICtrlCreateLabel("Zeit zum nächsten click: 0", 10, 280, 200, 17)
    $lbl_Testfeld = GUICtrlCreateLabel("Cursor in das Testfeld:", 10, 370, 200, 17)
    $lbl_Testbutton = GUICtrlCreateLabel("Cursor auf den Testbutton:", 10, 330, 200, 17)
    $lbl_Tastatur = GUICtrlCreateLabel("Eingabe 1 für Tastatur (1 Taste):", 10, 460, 200, 17)
    $lbl_Maus = GUICtrlCreateLabel("Eingabe 1 für Maus:", 10, 500, 200, 17)
    $lbl_Random = GUICtrlCreateLabel("Eingabe 1 für Random:", 10, 540, 200, 17)
    $lbl_Aktiv = GUICtrlCreateLabel("Nur eins kann aktiv sein!", 10, 420, 200, 17)
    $Input1 = GUICtrlCreateInput("", 260, 120, 70, 20)
    $Input2 = GUICtrlCreateInput("", 260, 160, 70, 20)
    $Input3 = GUICtrlCreateInput("", 260, 200, 70, 20)
    $Input4 = GUICtrlCreateInput("", 260, 380, 70, 20)
    $Input5 = GUICtrlCreateInput("0", 260, 460, 70, 20)
    $Input6 = GUICtrlCreateInput("0", 260, 500, 70, 20)
    $Input7 = GUICtrlCreateInput("0", 260, 540, 70, 20)
    $btn_Start = GUICtrlCreateButton("Start", 110, 10, 60, 20)
    $btn_Stopp = GUICtrlCreateButton("Stopp", 190, 10, 60, 20)
    $btn_NULL = GUICtrlCreateButton("NULL", 270, 10, 60, 20)
    $btn_Test = GUICtrlCreateButton("Test", 260, 330, 60, 20)
    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    _Exit()
    Case $btn_Start

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

    Case $btn_NULL

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

    Case $btn_Stopp

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

    EndSwitch
    WEnd

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]


    Bzgl. Design:
    GUISetFont brauchst du eigentlich nicht. Standardschriftgröße ist 8.5. Da sieht 9 nicht wirklich größer aus.
    Vielleicht wäre es sinnvoll für die Istwerte eigene Labels zu machen und diese untereinander zentriert zumachen. Weil Beschriftungen die statisch sind verändert man eigentlich nicht. Man sollte nur das dynamisch machen, was man auch wirklich zur Laufzeit ändern will.
    Ergo: Statische Labels brauchen dann auch keine Variable.

  • @m-obi vielen Dank, habe übersehen, dass der State berreits oben gesetzt war. Bzw. ist dieser in diesem Fall garnicht notwendig.


    Der ist sogar überhaupt nicht sinnvoll.

  • ah ok, das habe ich mal so übernommen. leider geht auch die variante von rynow nicht bzw mit dem selben effekt wie bei mir also das beendern der GUI geht erst nachdem die schleife voll ist.
    auch sollte man sagen, dass halt nach der sleepzeit ein tastendruck oder mausclick oder eins von beidem ausgeführt werden soll also bei zeile 104 fehlt für die tastaturvariante ein : Send ("1") oder mouseclick(left). wichtig dabei is halt die einstellbare basiszeit und eine einstellbare vraianz die zur basiszeit dazu addiert wird. gehen tut das ja aber is halt blöd, wenn ich den task killen muss um die anwendung während der schleife, z.B bei versuch nr 4 von 10 zu beenden. bei der mausclick variante hätte ich gerne noch eine varianz von x und y koordinaten aber das erst später ^^.
    wie mache ich die GUIGetMsg-Schleife fertig oder anders? gehören die btns nach while 1 oder vor GUISetState? is meine GUI nicht richtig aufgebaut ? ^^ bloß spaß und korrekturen erwünscht

  • Dass deine GUI nicht auf Eingaben reagiert liegt sehr wahrscheinlich an deinen Sleeps. Solange das Script schläft verbleibt es in genaue dieser Zeile und macht garnichts. Damit deine GUI möglichst sofort reagiert sind sleeps in GUI Schleifen grundsätzlich zu vermeiden. Grundsätzlich sollte man den Code in der GUI Schleife auch übersichtlich halten, sprich alles was mehr als 3,4 Zeilen braucht lagert man in Funktionen aus, welche unterhalb der GUI Schleife folgen. Aber auch hier musst du darauf achten, dass sich dein Script nicht zulange in der aufgerufenen Funktion befindet, da dies natürlich genauso die Auswertung der GUI Nachrichten blockiert (zur Not kann man guigetmsg aber auch innerhalb einer Funktion verwenden um auch dort GUI Nachtrichten auszuwerten). Mir fehlt jetzt die Lust dein Script umzubauen, aber prinzipiell würde ich timerinit, timerdiff und ggf. eine globale flag Variable verwenden um bestimmte Aktionen nach einem bestimmten Ereignis und erst nach Ablauf einer bestimmten Zeit auszuführen. Das erfordert aber einen grundsätzlichen Umbau deines Programms.

  • ok, danke nochmal für die hilfe!
    ich schau mal ob ich das hin bekomm. werd mich aber mit Sicherheit noch ein, - zwei mal melden müssen ;)

  • es geht immernoch nicht :/
    jo das prog schläft aber es sollte doch nach der zeit auch die if Anweisung von zeile 71 beachten
    oder gibt ein button klick keine 1 aus? den case fall $btn_Stopp wird auch ignoriert. wie kann ich denn sonst die shcleife abbrechen ?

  • [autoit]

    If $btn_Stopp = 1 then

    [/autoit]


    Ist schonmal total falsch. Da $btn_Stopp lediglich die ID beinhaltet von dem Control. Ob der Button gedrückt wurde, weißt du nur durch GUIGetMsg.
    Ich empfehle dir erstmal die Grundlagen anzueignen und die Tutorials zu machen. Die gloablen Variablen werden auch eigentlich am Scriptanfang deklariert direkt nach den Includes. Und ich würde wie misterspeed schon sagte, dass ganze in Funktionen aufteilen, einmal zur besseren Übersicht und zum zweiten für leichtere Fehlersuche.

    Achja und beim nächsten Mal bitte die autoit- und spoiler-Tags verwenden.

    Edit: Wozu eigentlich das?

    [autoit]

    Case $btn_Stopp
    $count = $Anzahl
    _Exit()

    [/autoit]


    Du beendest doch sowieso das Script. Wozu weißt du $count noch einen Wert zu?


    Worum gehts eigentlich? Vielleicht ist dein Ansatz falsch?

  • Morgen,

    jo sry das mit den autoit- und spoiler-Tags habe ich nicht geschnallt. ;) Ok, ich werde es mal mit Fuctionen versuchen. bevor ich jetz aber wieder ein fass auf mache will erstmal erklären wass ich da machen will. Also ich möchte das das Programm nach einer einstellbaren Zeit einen tastendruck oder mausclick ausführt. dieser soll nicht immer zur gleichen Zeit kommen, sondern die einstellbare basiszeit + eine einstellbare positive varianz (von z.B 300ms bis x ms )hier reicht es wenn nir der max wert der varianz einstellbar ist, ergeben die gesamtzeit zum nächsten tastendruck oder mausclick. Erstmal statisch d.h. eins von beiden ist vom start der schleife festgelegt.also auch eisntelllbar ob ich nun tastendrücke oder mausclicks haben will. besser wäre wenn sich Tastendruck und mausclick während der schleife willkürlich abwechseln also ein random zwischen 2 zuständen.
    Die Anzahl der wiederholungen soll auch einstellbar sein. mit nem stopp knopf sollte man dann die schleife auch zwischen den versuchen z.B. bei versuch 4 von 10 unterbrechen können um dann entweder die zeiten oder die anzahl der versuche zu ändern. Eine pause muss es nicht sein. Mit dem nächsten startknopf betätigen gehst einfach mit den eingestellten werten bei null los. Ein fenscher schließen soll natürlich die schleife und das programm beenden, also sofort unabhänig ob die schleife läuft oder nicht also zu jedem zeitpunkt. Der null knopf ist der reset. denn kann man sich vermutlich sparen wenn es klappt, dass in nem stopp fall oder nach beenden der durchläufe automatisch zurück gesetzt wird. Gut wäre noch wenn die Zeit bis zur nächsten Aktion als Countdown angezeigt würde.

    Spoiler anzeigen

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

    Global
    $count = 0 , $Start = 0, $Anzahl = 0, $MaxVarianz = 0 , $Basiszeit = 0 ,
    $Varianz = 0 ; $Gesamttzeit = $Basiszeit + $Varianz
    Global $Tastatur = 0 , $Maus = 0 , $Random = 0 , $CD = 0 , $VarianzVoll = 0 ,$zaehler = 0

    HotKeySet("{F2}", "_Exit")

    GUICreate("irgendwas", 360, 570)
    GUISetBkColor("0xFFFFCA")
    $lbl_count = GUICtrlCreateLabel("Versuche bisher: 0", 10, 50, 200,20)
    $lbl_Ist = GUICtrlCreateLabel("IST", 130, 90, 200, 17)
    $lbl_Soll = GUICtrlCreateLabel("Soll", 280, 90, 200, 17)
    $lbl_Anzahl = GUICtrlCreateLabel("Anzahl Läufe: 0", 10, 120, 200, 17)
    $lbl_Basiszeit = GUICtrlCreateLabel("Basiszeit: 0", 10, 160, 200, 17)
    $lbl_Varianz = GUICtrlCreateLabel("Varianz (größer 300): 0", 10, 200, 200, 17)
    $lbl_Gesamtzeit = GUICtrlCreateLabel("Gesamtzeit:", 10, 240, 200, 17)
    $lbl_zeit_laufend = GUICtrlCreateLabel("Zeit zum nächsten click: 0", 10, 280, 200, 17)
    $lbl_Testfeld = GUICtrlCreateLabel("Cursor in das Testfeld:", 10, 370, 200, 17)
    $lbl_Testbutton = GUICtrlCreateLabel("Cursor auf den Testbutton:", 10, 330, 200, 17)
    $lbl_Tastatur = GUICtrlCreateLabel("Eingabe 1 für Tastatur (1 Taste):", 10, 460, 200, 17)
    $lbl_Maus = GUICtrlCreateLabel("Eingabe 1 für Maus:", 10, 500, 200, 17)
    $lbl_Random = GUICtrlCreateLabel("Eingabe 1 für Random:", 10, 540, 200, 17)
    $lbl_Aktiv = GUICtrlCreateLabel("Nur eins kann aktiv sein!", 10, 420, 200, 17)
    $Input1 = GUICtrlCreateInput("", 260, 120, 70, 20)
    $Input2 = GUICtrlCreateInput("", 260, 160, 70, 20)
    $Input3 = GUICtrlCreateInput("", 260, 200, 70, 20)
    $Input4 = GUICtrlCreateInput("", 260, 380, 70, 20)
    $Input5 = GUICtrlCreateInput("0", 260, 460, 70, 20)
    $Input6 = GUICtrlCreateInput("0", 260, 500, 70, 20)
    $Input7 = GUICtrlCreateInput("0", 260, 540, 70, 20)
    $btn_Start = GUICtrlCreateButton("Start", 110, 10, 60, 20)
    $btn_Stopp = GUICtrlCreateButton("Stopp", 190, 10, 60, 20)
    $btn_NULL = GUICtrlCreateButton("NULL", 270, 10, 60, 20)
    $btn_Test = GUICtrlCreateButton("Test", 260, 330, 60, 20)
    GUISetState()

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    _Exit()

    Case $btn_Start

    $Anzahl = GUICtrlRead($Input1)
    $Basiszeit = GUICtrlRead($Input2)
    $MaxVarianz = GUICtrlRead($Input3)
    $Tastatur = GUICtrlRead($Input5)
    $Maus = GUICtrlRead($Input6)
    $Random = GUICtrlRead($Input7)

    guICtrlSetData($lbl_Anzahl,"Anzahl Läufe: " & $Anzahl)
    guICtrlSetData($lbl_Basiszeit,"Basiszeit: " & $Basiszeit)

    While $count < $Anzahl


    $count = $count +1
    $VarianzVoll = Random (300, $MaxVarianz,0)
    $Varianz = Round($VarianzVoll,3)
    $Gesamtzeit = $Basiszeit + $Varianz
    Sleep ($Gesamtzeit)

    ;Send ("1")

    guICtrlSetData($lbl_count,"Versuche bisher: " & $count)
    guICtrlSetData($lbl_Gesamtzeit,"Gesamtzeit: " & $Gesamtzeit)
    guICtrlSetData($lbl_Varianz,"Varianz (größer 300): " & $Varianz)


    GUIGetMsg($btn_Stopp)

    ; ExitLoop


    ;if $GUI_EVENT_CLOSE then
    ; _Exit()

    ;EndIf

    WEnd


    Case $btn_NULL

    $count = 0
    $start = 0
    $Anzahl = 0
    $Basiszeit = 0
    $Varianz = 0

    guICtrlSetData($lbl_count,"Versuche bisher: " & $count)
    guICtrlSetData($lbl_Anzahl,"Anzahl Läufe: " & $Anzahl )
    guICtrlSetData($lbl_Basiszeit,"Basiszeit: " & $Basiszeit )
    guICtrlSetData($lbl_Varianz,"Varianz (größer 300): " & $Varianz )

    Case $btn_Stopp
    _Exit()

    EndSwitch
    WEnd

    Func _Zaehler()
    ;Inhalt
    Endfunc


    Func _Exit()
    Exit
    EndFunc

    Code
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                _Exit()
    
    		Case $btn_Start

    Das bedeutet doch, für den fall das $GUI_EVENT_CLOSE gedrückt wird mache exit
    für den fall das $btn_Start gedrückt wird mache alls nachstehende.

    warum igrnoriert das prog dann alles nachstehende während es in der shcleife ist?
    mit

    Code
    Case $btn_Stopp
    			 _Exit()

    trifft doch ein anderer fall zu und damit müsste es doch aufhören die while schleife zu bearbeiten. der stopp button wird schon regstriert allerdings erst ausgeführt nachdem die schleife komplett ist. Und zu dem Sleep ich glauib mittlerweiel auch das es dafür wohl einen besseren weg geben würde ne art timer halt den das programm abartet und währendessena ber nicht schläft, bloß weis ich nicht wie.

    4 Mal editiert, zuletzt von J.K. (20. Juli 2013 um 09:02)

  • Hi,

    Zitat

    Also ich möchte das das Programm nach einer einstellbaren Zeit einen tastendruck oder mausclick ausführt.

    Bot?
    BotBotBotBotBot....

    Ansonsten ist das Script leider wieder einmal der typische Fall von "Handbooknotreaderror"!

    Weder irgendwelche Kommentare, so dass man nur ansatzweise erkennen könnte, was überhaupt beabsichtigt ist, noch irgendwelche Möglichkeiten oder auch nur Ansätze von Debugging(versuchen)!

    Zitat

    Gut wäre noch wenn die Zeit bis zur nächsten Aktion als Countdown angezeigt würde.


    Hier soll wieder mal nach 278 Push-Postings "der Arm aus der Sonne gelegt werden"! :thumbdown:

    Was soll das hier?

    [autoit]

    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE

    [/autoit]

    Besteht auch nur entfernt die Möglichkeit, den Event- bzw. Message-code abzufragen?

    [autoit]

    GUIGetMsg($btn_Stopp)

    [/autoit]

    ...was sagt denn die Hilfe zu GuiGetMsg() ?

    [autoit]

    Sleep($Gesamtzeit)

    [/autoit]

    ...was sagt denn die Hilfe zu Sleep() ?

    Zitat

    warum igrnoriert das prog dann alles nachstehende während es in der shcleife ist?

    Na wieso guckst du nicht einfach in deinem Programm, warum das so ist?
    Genau deshalb wurden die Möglichkeiten gegeben, Daten in die Console oder auch in einfache Messageboxen auszugeben.
    Ich wette, du hast KEINE Ahnung, wie dein Programmcode überhaupt abgearbeitet wird!
    Du stellt Vermutungen an und wenn diese nicht erfüllt werden, wird ein "Hilfe"-Thread gepostet...

    Was glaubst du, machen andere Leute mit deinem Code bzw. wie werden Lösungen erarbeitet? Draufgucken und die "richtigen Befehle" eintippern? :rofl:
    Dein "Programm" muss Zeile für Zeile abgearbeitet und analysiert weden. DU hast das noch kein einziges mal mit den dafür vorgesehenen Hilfsmitteln gemacht! Das erkennt man allein an der Anordnung der Zeilen!
    Wenn du nicht weisst, wie man Programme analysiert bzw. "Fehler" findet, wieso fragst du dann nicht danach, statt einfach irgendwelchen Schrott zu posten und andere diesen Mist dann auseinanderklabustern zu lassen?

    Spoiler anzeigen
    [autoit]

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

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

    Global $count = 0, $Start = 0, $Anzahl = 0, $MaxVarianz = 0, $Basiszeit = 0, $Varianz = 0 ; $Gesamttzeit = $Basiszeit + $Varianz
    Global $Tastatur = 0, $Maus = 0, $Random = 0, $CD = 0, $VarianzVoll = 0, $zaehler = 0

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

    HotKeySet("{F2}", "_Exit")

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

    GUICreate("irgendwas", 360, 570)
    GUISetBkColor("0xFFFFCA")
    $lbl_count = GUICtrlCreateLabel("Versuche bisher: 0", 10, 50, 200, 20)
    $lbl_Ist = GUICtrlCreateLabel("IST", 130, 90, 200, 17)
    $lbl_Soll = GUICtrlCreateLabel("Soll", 280, 90, 200, 17)
    $lbl_Anzahl = GUICtrlCreateLabel("Anzahl Läufe: 0", 10, 120, 200, 17)
    $lbl_Basiszeit = GUICtrlCreateLabel("Basiszeit: 0", 10, 160, 200, 17)
    $lbl_Varianz = GUICtrlCreateLabel("Varianz (größer 300): 0", 10, 200, 200, 17)
    $lbl_Gesamtzeit = GUICtrlCreateLabel("Gesamtzeit:", 10, 240, 200, 17)
    $lbl_zeit_laufend = GUICtrlCreateLabel("Zeit zum nächsten click: 0", 10, 280, 200, 17)
    $lbl_Testfeld = GUICtrlCreateLabel("Cursor in das Testfeld:", 10, 370, 200, 17)
    $lbl_Testbutton = GUICtrlCreateLabel("Cursor auf den Testbutton:", 10, 330, 200, 17)
    $lbl_Tastatur = GUICtrlCreateLabel("Eingabe 1 für Tastatur (1 Taste):", 10, 460, 200, 17)
    $lbl_Maus = GUICtrlCreateLabel("Eingabe 1 für Maus:", 10, 500, 200, 17)
    $lbl_Random = GUICtrlCreateLabel("Eingabe 1 für Random:", 10, 540, 200, 17)
    $lbl_Aktiv = GUICtrlCreateLabel("Nur eins kann aktiv sein!", 10, 420, 200, 17)
    $Input1 = GUICtrlCreateInput("20000", 260, 120, 70, 20)
    $Input2 = GUICtrlCreateInput("100", 260, 160, 70, 20)
    $Input3 = GUICtrlCreateInput("400", 260, 200, 70, 20)
    $Input4 = GUICtrlCreateInput("", 260, 380, 70, 20)
    $Input5 = GUICtrlCreateInput("0", 260, 460, 70, 20)
    $Input6 = GUICtrlCreateInput("1", 260, 500, 70, 20)
    $Input7 = GUICtrlCreateInput("0", 260, 540, 70, 20)
    $btn_Start = GUICtrlCreateButton("Start", 110, 10, 60, 20)
    $btn_Stopp = GUICtrlCreateButton("Stopp", 190, 10, 60, 20)
    $btn_NULL = GUICtrlCreateButton("NULL", 270, 10, 60, 20)
    $btn_Test = GUICtrlCreateButton("Test", 260, 330, 60, 20)
    GUISetState()

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

    While 1
    $msg=GUIGetMsg()
    ;msg nur anzeigen, wenn <>0
    if $msg<>0 and $msg<>-11 then ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $msg = ' & $msg & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    Switch $msg
    Case $GUI_EVENT_CLOSE
    _Exit()

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

    Case $btn_Start
    ;msgbox nur eine sekunde anzeigen
    MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @lf & '$btn_Start' & @lf & @lf & 'Return:' & @lf & $btn_Start,1) ;### Debug MSGBOX

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

    $Anzahl = GUICtrlRead($Input1)
    $Basiszeit = GUICtrlRead($Input2)
    $MaxVarianz = GUICtrlRead($Input3)
    $Tastatur = GUICtrlRead($Input5)
    $Maus = GUICtrlRead($Input6)
    $Random = GUICtrlRead($Input7)

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

    GUICtrlSetData($lbl_Anzahl, "Anzahl Läufe: " & $Anzahl)
    GUICtrlSetData($lbl_Basiszeit, "Basiszeit: " & $Basiszeit)

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

    While $count < $Anzahl

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

    $count = $count + 1
    $VarianzVoll = Random(300, $MaxVarianz, 0)
    $Varianz = Round($VarianzVoll, 3)
    $Gesamtzeit = $Basiszeit + $Varianz
    Sleep($Gesamtzeit)

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

    ;Send ("1")

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

    GUICtrlSetData($lbl_count, "Versuche bisher: " & $count)
    GUICtrlSetData($lbl_Gesamtzeit, "Gesamtzeit: " & $Gesamtzeit)
    GUICtrlSetData($lbl_Varianz, "Varianz (größer 300): " & $Varianz)

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

    $msg1=guigetmsg() ;buttons abfragen, Button muss midestens $Gesamtzeit gedrückt sein bevor release!!!!!
    if $msg1<>0 and $msg1<>-11 then ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $msg1 = ' & $msg1 & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    if $msg1=$btn_Stopp then ExitLoop ;wenn Stop gedrückt, dann schleife verlassen
    if $msg1=$GUI_EVENT_CLOSE then _Exit()

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

    WEnd

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

    Case $btn_NULL
    MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @lf & '$btn_NULL' & @lf & @lf & 'Return:' & @lf & $btn_NULL) ;### Debug MSGBOX

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

    $count = 0
    $Start = 0
    $Anzahl = 0
    $Basiszeit = 0
    $Varianz = 0

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

    GUICtrlSetData($lbl_count, "Versuche bisher: " & $count)
    GUICtrlSetData($lbl_Anzahl, "Anzahl Läufe: " & $Anzahl)
    GUICtrlSetData($lbl_Basiszeit, "Basiszeit: " & $Basiszeit)
    GUICtrlSetData($lbl_Varianz, "Varianz (größer 300): " & $Varianz)

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

    Case $btn_Stopp
    MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @lf & '$btn_Stopp' & @lf & @lf & 'Return:' & @lf & $btn_Stopp) ;### Debug MSGBOX

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

    _Exit()

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

    EndSwitch
    WEnd

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

    Func _Zaehler()
    ;Inhalt
    EndFunc ;==>_Zaehler

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

    Func _Exit()
    MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @lf & '_Exit' & @lf & @lf & 'Return:' & @lf ) ;### Debug MSGBOX
    Exit
    EndFunc ;==>_Exit

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Er ist ja halt noch in der Schleife drin. Wie soll er dann dazu kommen GUIGetMsg abzufragen???

    Vielleicht macht bei dir der OnEvent-Mode mehr Sinn, als der MessageLoop-Mode.
    Und wenn du Timer brauchst, guck dir dann lieber AdLibRegister oder die Timers UDF an.
    Oder TimerInit/TimerDiff.

    Wos sollen denn die Tastendrücke und Mausklicks ausgeführt werden?

  • Zitat

    Er ist ja halt noch in der Schleife drin. Wie soll er dann dazu kommen GUIGetMsg abzufragen???

    hmmm, ja wie auch? Indem er überhaupt erstmal peilt, wie ein Programm funktioniert!
    Indem realisiert wird, dass ein Programm Zeilen nacheinander abarbeitet und somit auch Ereignisse auch nur nacheinander abgefangen werden können!

    Zitat

    Vielleicht macht bei dir der OnEvent-Mode mehr Sinn, als der MessageLoop-Mode.

    :D made my day...
    Das fällt immerhin schon im 19. Post auf :rock:

    Aber das war garnicht die Fragestellung bzw. die Lösung zum Problem!

    Zitat

    Eigentlich sollte das Programm in einen andern case Schritt springen ($zaehler =0). Betätige ich das „X“ passiert zunächst auch nichts, erst wenn alle Durchläufe vorbei sind geht dann das
    Fenster zu wie ein quasi „ gespeichertes“ Kommando...........Irgendwie muss ich
    doch vorher aus dem case schritt aussteigen können.

    Die Fragestellung wurde beantwortet, das Programmtechnische Problem gelöst, aber das Script ist immer noch MÜLL, weil das gesamte Konzept in der Kombination von SLEEP() mit GUIGETMSG() garnicht funktionieren kann!
    Und wieso ist er auf diese Erkenntnis nicht schon viel früher gekommen?
    Weil die Hilfe zu Sleep()

    Zitat von Hilfe zu Sleep()

    Pausiert die Skript Ausführung.

    völlig ignoriert wurde...