stopknopf klappt nicht

  • huhu, kann mir zufällig bitte wer verraten, warum ich hier mit dem start/stop knopf nicht die funktion druecken() pausieren kann? nach erneutem drücken solltes wieder losgehn :D
    und wenn sich dass wer anschaut, bitte gleich mit tipps geben, was ich besser machen könnte, was evtl falsch ist und was einfacher gehen würde. das ist mein erstes script überhaupt.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    $Form1 = GUICreate("test", 221, 383, 434, 271)
    $Label1 = GUICtrlCreateLabel("lalala", 16, 8, 106, 17)
    $Input1 = GUICtrlCreateInput("", 96, 48, 41, 21)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Checkbox1 = GUICtrlCreateCheckbox("", 64, 48, 17, 17)
    $Button1 = GUICtrlCreateButton("Start/Pause", 24, 336, 75, 25, 0)
    GUISetState(@SW_SHOW)
    $pause = 1

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

    checkprocess()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    exit
    Case $Checkbox1
    If BitAND(GUICtrlRead($Checkbox1), $GUI_CHECKED) Then
    GUICtrlSetState($Input1, $GUI_ENABLE)
    Else
    GUICtrlSetState($Input1, $GUI_DISABLE)
    EndIf
    endswitch

    Select
    Case $nMsg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $nmsg = $Button1
    If $pause = 1 Then ;wird abgefragt ob Sleep schon aktiv oder nicht
    $pause = 0
    Else
    $pause = 1
    EndIf
    while 1
    druecken()
    wend
    EndSelect
    wend

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

    func checkprocess()
    If ProcessExists("prog.exe") Then
    Else
    MsgBox(0, 'Fehl0R', 'prog nich gestartet un so')
    exit
    EndIf
    EndFunc

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

    Func druecken()
    if $pause = 0 Then
    activate()
    If GUICtrlRead($Checkbox1) = 1 Then
    $delay = GUICtrlRead($Input1)
    sleep($delay)
    send("{F5}")
    EndIf
    endif
    EndFunc

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

    func activate()
    WinActivate("Prog")
    WinSetState("Prog","",@SW_ENABLE)
    endfunc

    [/autoit]
  • HI,

    while 1
    druecken()
    wend

    Wegen dieser Endlosschleife wurde nicht mehr abgefragt ob der Button1 gedrückt wurde.
    Funktion CheckProcess scheint mir sinnlos zu sein: wenn der Prozess nicht existiert wie soll er diese Funktion dann ausführen? :D
    Select/Endselect ist nicht nötig man kann den Inhalt in Switch einsetzein.

    Hab das Ganze umgeschrieben, kannst es dir anschauen.

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>

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

    $Form1 = GUICreate("test", 221, 383, 434, 271)
    $Label1 = GUICtrlCreateLabel("lalala", 16, 8, 106, 17)
    $Input1 = GUICtrlCreateInput("", 96, 48, 41, 21)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Checkbox1 = GUICtrlCreateCheckbox("", 64, 48, 17, 17)
    $Button1 = GUICtrlCreateButton("Start/Pause", 24, 336, 75, 25, 0)
    $pause = 1
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Checkbox1
    If BitAND(GUICtrlRead($Checkbox1), $GUI_CHECKED) Then
    GUICtrlSetState($Input1, $GUI_ENABLE)
    Else
    GUICtrlSetState($Input1, $GUI_DISABLE)
    EndIf
    Case $nmsg = $Button1
    If $pause = 1 Then ;wird abgefragt ob Sleep schon aktiv oder nicht
    $pause = 0
    Else
    $pause = 1
    EndIf
    EndSwitch
    druecken()
    WEnd

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

    Func druecken()
    If $pause = 0 Then
    activate()
    If GUICtrlRead($Checkbox1) = 1 Then
    $delay = GUICtrlRead($Input1)
    Sleep($delay)
    Send("{F5}")
    EndIf
    EndIf
    EndFunc

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

    Func activate()
    $state = WinGetState($Form1)
    If Not BitAND($state, 8) Then WinActivate($Form1)
    If Not BitAND($state, 4) Then WinSetState($Form1,"",@SW_ENABLE)
    EndFunc

    [/autoit]

    2 Mal editiert, zuletzt von Dan (29. April 2008 um 22:03)

  • Hab auch mal ein allgemeines Beispiel zusammen gestümpert :)

    Spoiler anzeigen
    [autoit]

    #cs
    Mini Demo wie man eine Pause einbauen könnte.
    Als Beispiel soll mal Noptepad dienen.
    #ce
    Opt("OnExitFunc","OnAutoItExit") ;Beim Beenden von dem Script soll noch das Notepad geschlossen werden
    Opt("WinTitleMatchMode", 2) ;Er soll einen Teil des Titeltextes suchen, könnte also auch unten nur Unbenannt stehen :)
    Opt("GUIOnEventMode", 1) ;Auf Event Mode umgschalten.

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

    #include <GUIConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $frmMain = GUICreate("Notepad Ticker", 207, 86, 0, 0)
    $cmdStartPause = GUICtrlCreateButton("Start/Pause", 8, 8, 193, 33, 0)
    GUICtrlSetOnEvent(-1,"_StartStop")
    $cmdExit = GUICtrlCreateButton("Beenden", 8, 48, 193, 33, 0)
    GUICtrlSetOnEvent(-1,"_Exit")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    ;Notepad starten und positionieren
    $pid = Run('Notepad.exe')
    WinWaitActive("Unbenannt - Editor", "")
    WinMove("Unbenannt - Editor","",0,105,300,300)
    $run = False
    While 1
    WEnd

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

    ;Diese Funktion wird aufgerufen wenn man den Start/Pause Button drückt
    Func _StartStop()
    $run = Not $run
    If $run Then
    _MachWas()
    AdlibEnable("_MachWas",3000)
    Else
    AdlibDisable()
    EndIf
    EndFunc

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

    ;Diese Funktion wird alle 3 Sekunden aufgerufen und für halt seine Aufgaben durch
    Func _MachWas()
    WinActivate("Unbenannt - Editor")
    WinWaitActive("Unbenannt - Editor")
    Send("{F5} - " & @HOUR & @MIN & @SEC & " {ENTER}")
    EndFunc

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

    ;Sollte wohl klar sein
    Func _Exit()
    Exit
    EndFunc

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

    ;Die Funktion die aufgerufen wird, wenn ich Exit ausführe
    Func OnAutoItExit()
    ProcessClose($pid)
    EndFunc

    [/autoit]

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)