GUI bei sleep außer Funktion

  • Hallo,

    ich habe folgenden Code:

    [autoit]

    #include <GUIConstantsEx.au3>

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

    GuiCreate("Test")
    GUISetState(@SW_SHOW)

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

    $iniFilename = @ScriptDir & "\settings.ini"

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

    $windowInput = GUICtrlCreateInput(IniRead($iniFilename, "settings", "window", ""), 50, 20)
    $keys = GUICtrlCreateInput(IniRead($iniFilename, "settings", "keys", ""), 50, 50)
    $startTime = GUICtrlCreateInput(IniRead($iniFilename, "settings", "startTime", ""), 50, 80)
    $endTime = GUICtrlCreateInput(IniRead($iniFilename, "settings", "endTime", ""), 50, 110)
    $controlInput = GUICtrlCreateInput(IniRead($iniFilename, "settings", "control", ""), 50, 140)
    $startButton = GUICtrlCreateButton("Start", 5, 5)
    $endButton = GUICtrlCreateButton("Stop", 5, 50)
    $status = GUICtrlCreateLabel("Nicht gestartet", 100, 200)
    $started = false
    $wait = 0

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

    $a = GUICtrlCreateButton("Sadsf", 200, 200)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $startButton
    $started = true
    GUICtrlSetData($status, "Gestartet")
    Case $endButton
    msgbox(0, "a", "a")
    $started = false
    GUICtrlSetData($status, "Nicht Gestartet")
    Case $a
    msgbox(0, "a", "a")
    EndSwitch

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

    if $started = True Then
    if $wait <> 0 Then
    Sleep( $wait )
    EndIf
    ControlSend(GUICtrlRead($windowInput), "", GUICtrlRead($controlInput), GUICtrlRead($keys))
    $wait = Random(GUICtrlRead($startTime), GUICtrlRead($endTime)) * 1000
    EndIf
    WEnd

    [/autoit]

    Wenn ich jetzt auf Start klicke, startet auch alles, so wie ich will,
    allerdings kann ich dann weder Beenden noch auf das Kreuz vom Fenster klicken.

    Hat jemand ne Idee wie ich das behebe?

    mfg dragon_killer

  • mach das mal

    [autoit]

    #include <GUIConstantsEx.au3>

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

    GuiCreate("Test")
    GUISetState(@SW_SHOW)

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

    $iniFilename = @ScriptDir & "\settings.ini"

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

    $windowInput = GUICtrlCreateInput(IniRead($iniFilename, "settings", "window", ""), 50, 20)
    $keys = GUICtrlCreateInput(IniRead($iniFilename, "settings", "keys", ""), 50, 50)
    $startTime = GUICtrlCreateInput(IniRead($iniFilename, "settings", "startTime", ""), 50, 80)
    $endTime = GUICtrlCreateInput(IniRead($iniFilename, "settings", "endTime", ""), 50, 110)
    $controlInput = GUICtrlCreateInput(IniRead($iniFilename, "settings", "control", ""), 50, 140)
    $startButton = GUICtrlCreateButton("Start", 5, 5)
    $endButton = GUICtrlCreateButton("Stop", 5, 50)
    $status = GUICtrlCreateLabel("Nicht gestartet", 100, 200)
    $started = false
    $wait = 0

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

    $a = GUICtrlCreateButton("Sadsf", 200, 200)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $startButton
    $started = true
    GUICtrlSetData($status, "Gestartet")
    Case $endButton
    msgbox(0, "a", "a")
    $started = false
    GUICtrlSetData($status, "Nicht Gestartet")
    Case $a
    msgbox(0, "a", "a")
    EndSwitch

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

    if $started = True Then
    if $wait <> 0 Then
    Sleep( 1000 ) <---- das steht für eine secunde
    EndIf
    ControlSend(GUICtrlRead($windowInput), "", GUICtrlRead($controlInput), GUICtrlRead($keys))
    $wait = Random(GUICtrlRead($startTime), GUICtrlRead($endTime)) * 1000
    EndIf
    WEnd

    [/autoit]
  • Ja, bei 1000 gehts.
    Wenn ich aber zwischen 7000-8000 bin (so hoch brauch ich die Wartezeit), kann ichs halt nicht mehr stoppen :(

  • Das liegt daran, dass in der While Schleife auch der "X" Button abgefragt wird.
    Wenn du einen Sleep einbaust, stoppst du die Schleife.
    Ergo:
    Das klicken auf das X bewirkt nichts !
    Du kannst dies aber mit AdlIbenable lösen :)

  • Hallo dragon_killer,

    im OnEventMode funktionierst einfacher:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    Opt('GuiOnEventMode', 1)
    GUICreate("Test")

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

    $iniFilename = @ScriptDir & "\settings.ini"

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

    $windowInput = GUICtrlCreateInput(IniRead($iniFilename, "settings", "window", ""), 50, 20)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_Terminate')
    $keys = GUICtrlCreateInput(IniRead($iniFilename, "settings", "keys", ""), 50, 50)
    $startTime = GUICtrlCreateInput(IniRead($iniFilename, "settings", "startTime", ""), 50, 80)
    $endTime = GUICtrlCreateInput(IniRead($iniFilename, "settings", "endTime", ""), 50, 110)
    $controlInput = GUICtrlCreateInput(IniRead($iniFilename, "settings", "control", ""), 50, 140)
    $startButton = GUICtrlCreateButton("Start", 5, 5)
    GUICtrlSetOnEvent($startButton, '_Start')
    $endButton = GUICtrlCreateButton("Stop", 5, 50)
    GUICtrlSetOnEvent($startButton, '_End')
    $status = GUICtrlCreateLabel("Nicht gestartet", 100, 200)
    $started = False
    $wait = 0

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

    $a = GUICtrlCreateButton("Sadsf", 200, 200)
    GUICtrlSetOnEvent($startButton, '_A')
    GUISetState()

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

    While 1
    If $started = True Then
    ; ControlSend(GUICtrlRead($windowInput), "", GUICtrlRead($controlInput), GUICtrlRead($keys))
    $wait = Random(GUICtrlRead($startTime), GUICtrlRead($endTime)) * 1000
    If $wait <> 0 Then
    Sleep($wait)
    EndIf
    MsgBox(0, "Send", "Test", 5)
    EndIf
    WEnd

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

    Func _Terminate()
    Exit
    EndFunc ;==>_Terminate

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

    Func _Start()
    $started = True
    GUICtrlSetData($status, "Gestartet")
    EndFunc ;==>_Start

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

    Func _End()
    MsgBox(0, "b", "b")
    $started = False
    GUICtrlSetData($status, "Nicht Gestartet")
    EndFunc ;==>_End

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

    Func _A()
    MsgBox(0, "a", "a")
    EndFunc ;==>_A

    [/autoit]

    Die Messages werden alle der Reihe nach behandelt, das heisst du musst dann auch warten bis der Sleep abgelaufen ist, aber die func wird danach ausgeführt

    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (7. Oktober 2009 um 20:19)