wenn 10 sec. nichts passiert dann...

  • ich hab wieder einmal eine frage zu einem problem (wie könnt es anders sein)

    ich hab eine schleife :

    Spoiler anzeigen

    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then
    elseif $msg = $aktualisieren Then
    ************************
    elseif $msg = $profilaendern Then
    ************************
    elseif $msg = $statusok Then
    ************************
    endif


    und ich will das wenn 10 secunden lang kein button gedrückt wirt die schleife beendet wird (exitloop). Wie mach ich das ? ich hab schon gedacht das ic hes ins "else" schreibe doch dann werden alle "elseif"´s drausen geleassen und nur für 10 sec blockiert

    HILFE!

  • hab da mal was gemacht... geht vielleicht auch einfacher...

    kurze Erklärung:

    Das GUI wird 10 Sek. am Leben erhalten außer ich drücke den Button. Danach geht das ganze von vorne los - drücke ich nicht innerhalb der 10 Sek. den Button wird das Script beendet!

    also denne viel Spass...

    Greetz Oli

    Spoiler anzeigen
    [autoit]


    ; UDF´s ~

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

    #include <GUIConstants.au3>

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

    ; Optionen ~

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

    Opt("GUIOnEventMode", 1)

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

    ; GUI & Controls mit Events ~

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

    $exit=0

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

    $maingui=GUICreate("Test", 500, 500)
    GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents")
    GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents")

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

    $button=GUICtrlCreateButton("Nicht beenden!", 100, 100, 250, 30)
    GUICtrlSetOnEvent($button, "setTrue")

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

    ; GUI-Schleife ~

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

    GUISetState(@SW_SHOW)
    While 1
    Sleep(10000) ; 10 Sek. wird das GUI am Leben erhalten
    If $exit=1 Then ; Die Var. $exit wird auf den Wert geprüft und dementsprechend gehandelt
    MsgBox(0, "", "Ich bin der Beweiß, dass alles weiterläuft!")
    MsgBox(0, "", "Der Wert wird nun wieder auf '0' gesetzt - das Spiel geht wieder von vorne los *hehe*")
    $exit=0
    Else
    Exit ; Es wird beendet wenn nicht der Button "Nicht beenden!" gedrückt wurde und somit $exit nicht auf den Wert "1" geändert wurde
    EndIf
    Wend

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

    ; Funktionen ~

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

    Func setTrue()
    $exit=1
    EndFunc ; Setzt die Variable $exit auf 1

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

    Func SpecialEvents()
    Select
    Case @GUI_CTRLID=$GUI_EVENT_CLOSE
    Exit
    Case @GUI_CTRLID=$GUI_EVENT_MINIMIZE
    Case @GUI_CTRLID=$GUI_EVENT_RESTORE
    EndSelect
    EndFunc ; Close, Minimize und Restore

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Baue z.B. folgendes in die Schleife ein:

    Spoiler anzeigen
    [autoit]


    $iTimeOutTimer = TimerInit()

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

    While TimerDiff($iTimeOutTimer) < 10000

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

    Dim $nMsg = GUIGetMsg()
    If $nMsg Then $iTimeOutTimer = TimerInit()

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

    ;.... Anweisungen

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

    Wend

    [/autoit]

    Sobald ein GUI Ereignis auftritt wird hier per TimerInit() die Zeit immer wieder neu "gestartet".

    Viele Grüße
    Stilgar

    Einmal editiert, zuletzt von Stilgar (22. August 2007 um 10:39)

  • das ist nicht ganz das was ich will....ich will in einer schleife ganz normale abfragen machen ob irgend ein button gedrückt wird. und wenn 10 sekunden vorbei sind soll die schleife beendte werden.

    [autoit]

    while 1

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

    while1
    wen das then
    DAS
    wen das then
    DAS
    wen 10 sec nix passiert Then
    EXITLOOP
    wend

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

    wend

    [/autoit]

    wenn ich die innere schleife dann verlasse wird das ganze wieder von vorne durchgenommen es soll also alle 10 secunden neu gestartet werden

    2 Mal editiert, zuletzt von Hollywood (22. August 2007 um 10:59)

  • das geht übrigens nicht mit sleep da es alles andere für 10 sec. sperrt und dan einfach neu startet!

  • äääähm genau das hab ich dir gemacht ;)

    nur wirst du es in der form wie DU das machen willst ned hinbekommen... du kannst nicht 2 sachen gleichzeitig ablaufen lassen - deßhalb hab ich das mit dem OnEventMode gemacht...


    UUUUUUUUND EDIT:

    Bei mir sperrt das sleep nichts für die 10 Sekunden! genau das hab ich über das OnEventDing gelöst ;) schau dir das Script erst mal an bevor du sagst da geht was nich...

    Einmal editiert, zuletzt von oliverh (22. August 2007 um 11:15)

  • lol...ich bin zu dumm...aber naja...
    OK folgendes, das ganze soll ein chat werden der nur auf einem im netzwerk freigegebenen laufwerk basiert. wen ich eine nachricht schreibe wird diese nachricht in eine ini datei auf diesem laufwerk geschrieben (so hat man auch gleich den log): jetzt das ganze skrip:

    Spoiler anzeigen

    #include <GUIConstants.au3>
    #NoTrayIcon

    $key = iniread("J:\IL\Immervoll\chatserver\chatroom.ini","Nachrichten","Anzahl","0")
    $name = iniread(@ScriptDir &"\Profil.ini","Persönliches","Name","kein Name")
    $nachricht2 = IniRead("J:\IL\Immervoll\chatserver\chatroom.ini","Nachrichten",$key-1,"0")
    $nachricht3 = IniRead("J:\IL\Immervoll\chatserver\chatroom.ini","Nachrichten",$key-2,"0")
    $nachricht4 = IniRead("J:\IL\Immervoll\chatserver\chatroom.ini","Nachrichten",$key-3,"0")
    $nachricht5 = IniRead("J:\IL\Immervoll\chatserver\chatroom.ini","Nachrichten",$key-4,"0")
    $nachricht6 = IniRead("J:\IL\Immervoll\chatserver\chatroom.ini","Nachrichten",$key-5,"0")
    $nachricht7 = IniRead("J:\IL\Immervoll\chatserver\chatroom.ini","Nachrichten",$key-6,"0")
    $nachricht8 = IniRead("J:\IL\Immervoll\chatserver\chatroom.ini","Nachrichten",$key-7,"0")

    GUICreate ( "office.CHAT", 570,200,700,200)
    GUISetIcon ( "C:\WINDOWS\system32\SHELL32.dll",172)
    $senden = GUICtrlCreateButton("Senden",220,160,70,20)

    $aktualisieren = GUICtrlCreateButton("Aktualisieren",375,10,85,30)
    $profilaendern = GUICtrlCreateButton("Profil ändern",460,10,85,30)
    $statusok = GUICtrlCreateButton("OK",495,75,50,20)


    While 1

    $key = iniread("J:\IL\Immervoll\chatserver\chatroom.ini","Nachrichten","Anzahl","0")
    $name = iniread(@ScriptDir &"\Profil.ini","Persönliches","Name","kein Name")
    $nachricht2 = IniRead("J:\IL\Immervoll\chatserver\chatroom.ini","Nachrichten",$key-1,"0")
    $nachricht3 = IniRead("J:\IL\Immervoll\chatserver\chatroom.ini","Nachrichten",$key-2,"0")
    $nachricht4 = IniRead("J:\IL\Immervoll\chatserver\chatroom.ini","Nachrichten",$key-3,"0")
    $nachricht5 = IniRead("J:\IL\Immervoll\chatserver\chatroom.ini","Nachrichten",$key-4,"0")
    $nachricht6 = IniRead("J:\IL\Immervoll\chatserver\chatroom.ini","Nachrichten",$key-5,"0")
    $nachricht7 = IniRead("J:\IL\Immervoll\chatserver\chatroom.ini","Nachrichten",$key-6,"0")
    $nachricht8 = IniRead("J:\IL\Immervoll\chatserver\chatroom.ini","Nachrichten",$key-7,"0")
    $letztes = Iniread(@ScriptDir &"\Profil.ini","Server","Anzahl","0")
    $onlineandi = Iniread("J:\IL\Immervoll\chatserver\golbalusers.ini","Andi","Onlinestatus","")
    $onlinemarco = Iniread("J:\IL\Immervoll\chatserver\golbalusers.ini","Marco","Onlinestatus","")
    $onlinegeri = Iniread("J:\IL\Immervoll\chatserver\golbalusers.ini","Geri","Onlinestatus","")
    $onlinekerstin = Iniread("J:\IL\Immervoll\chatserver\golbalusers.ini","Kerstin","Onlinestatus","")
    $onlinemelli = Iniread("J:\IL\Immervoll\chatserver\golbalusers.ini","Melli","Onlinestatus","")
    $Status = GUICtrlCreateCombo("",375,45,170,30)
    GUICtrlSetData(-1,"online|beschäftigt|abwesend|in 5 minuten zurück|in 15 minuten zurück|in 30 minuten zurück|in 1 Stunde zurück","online")

    $nachrichtsend = GUICtrlCreateInput("",10,160,200,20)
    $edit = GUICtrlCreateEdit($nachricht8 & @CRLF & $nachricht7 & @CRLF & $nachricht6 & @CRLF & $nachricht5 & @CRLF & $nachricht4 & @CRLF & $nachricht3 & @CRLF & $nachricht2 ,10,10,360,140)
    ControlFocus ( "office.CHAT", "Senden", 3 )
    $l1 = GUICtrlCreateLabel("Andi ist",380,100)
    $l2 = GUICtrlCreateLabel($onlineandi,440,100)
    if $onlineandi = "online" Then
    GUICtrlSetColor(11,0x00ff00)
    elseif $onlineandi = "beschäftigt" Then
    GUICtrlSetColor(11,0x0000ff)
    ElseIf $onlineandi = "abwesend" Then
    GUICtrlSetColor(11,0xff0000)
    elseif $onlineandi = "offline" Then
    GUICtrlSetColor(11,0x888888)
    EndIf
    $l3 = GUICtrlCreateLabel("Marco ist",380,120)
    $l4 = GUICtrlCreateLabel($onlinemarco,440,120)
    if $onlinemarco = "online" Then
    GUICtrlSetColor(13,0x00ff00)
    elseif $onlinemarco = "beschäftigt" Then
    GUICtrlSetColor(13,0x0000ff)
    ElseIf $onlinemarco = "abwesend" Then
    GUICtrlSetColor(13,0xff0000)
    elseif $onlinemarco = "offline" Then
    GUICtrlSetColor(13,0x888888)
    EndIf
    $l5 = GUICtrlCreateLabel("Geri ist",380,140)
    $l6 = GUICtrlCreateLabel($onlinegeri,440,140)
    if $onlinegeri = "online" Then
    GUICtrlSetColor(15,0x00ff00)
    elseif $onlinegeri = "beschäftigt" Then
    GUICtrlSetColor(15,0x0000ff)
    ElseIf $onlinegeri = "abwesend" Then
    GUICtrlSetColor(15,0xff0000)
    elseif $onlinegeri = "offline" Then
    GUICtrlSetColor(15,0x888888)
    EndIf
    $l7 = GUICtrlCreateLabel("Kerstin ist",380,160)
    $l8 = GUICtrlCreateLabel($onlinekerstin,440,160)
    if $onlinekerstin = "online" Then
    GUICtrlSetColor(17,0x00ff00)
    elseif $onlinekerstin = "beschäftigt" Then
    GUICtrlSetColor(17,0x0000ff)
    ElseIf $onlinekerstin = "abwesend" Then
    GUICtrlSetColor(17,0xff0000)
    elseif $onlinekerstin = "offline" Then
    GUICtrlSetColor(17,0x888888)
    EndIf
    $l9 = GUICtrlCreateLabel("Melli ist",380,180)
    $l0 = GUICtrlCreateLabel($onlinemelli,440,180)
    if $onlinemelli = "online" Then
    GUICtrlSetColor(19,0x00ff00)
    elseif $onlinemelli = "beschäftigt" Then
    GUICtrlSetColor(19,0x0000ff)
    ElseIf $onlinemelli = "abwesend" Then
    GUICtrlSetColor(19,0xff0000)
    elseif $onlinemelli = "offline" Then
    GUICtrlSetColor(19,0x888888)
    EndIf


    GUISetState()
    While 1
    $msg = GUIGetMsg()

    If $msg = $GUI_EVENT_CLOSE Then
    IniWrite("J:\IL\Immervoll\chatserver\golbalusers.ini",$name,"Status","offline")
    IniWrite("J:\IL\Immervoll\chatserver\golbalusers.ini",$name,"Onlinestatus","offline")
    Exit
    elseif $msg = $senden Then
    $key = iniread("J:\IL\Immervoll\chatserver\chatroom.ini","Nachrichten","Anzahl","0")
    iniwrite("J:\IL\Immervoll\chatserver\chatroom.ini","Nachrichten",$key,$name & ": " & GUICtrlRead($nachrichtsend))
    $key = $key + 1
    IniWrite("J:\IL\Immervoll\chatserver\chatroom.ini","Nachrichten","Anzahl",$key)
    IniWrite(@ScriptDir &"\Profil.ini","Server","Anzahl",$key)
    ExitLoop
    elseif $msg = $aktualisieren Then
    exitloop
    elseif $msg = $profilaendern Then
    run(@ScriptDir &"\profil ändern.exe")
    elseif $msg = $statusok Then
    iniwrite("J:\IL\Immervoll\chatserver\golbalusers.ini",$name,"Onlinestatus",GUICtrlRead($Status))
    exitloop
    endif
    $iTimeOutTimer = TimerInit()

    While TimerDiff($iTimeOutTimer) < 10000

    Dim $nMsg = GUIGetMsg()
    If $nMsg Then $iTimeOutTimer = TimerInit()

    ;.... Anweisungen

    Wend
    Wend
    GUICtrlDelete ( $edit )
    GUICtrlDelete ($nachrichtsend )
    GUICtrlDelete ( $l1 )
    GUICtrlDelete ( $l2 )
    GUICtrlDelete ( $l3 )
    GUICtrlDelete ( $l4 )
    GUICtrlDelete ( $l5 )
    GUICtrlDelete ( $l6 )
    GUICtrlDelete ( $l7 )
    GUICtrlDelete ( $l8 )
    GUICtrlDelete ( $l9 )
    GUICtrlDelete ( $l0 )
    GUICtrlDelete ( $Status )
    wend

    und das einzige was noch nicht funktioniert ist das automatische aktualisieren!!! es soll also alle 10 sekunden die schleife verlassen. so als ob man den aktualisier button drücken würde. leider versteh ic hso garnicht wie und wo ic hdein skript darein schreiben soll

    edit: ist es vieleicht moglich von einem anderen skript aus einen button zu drücken? dan ginge es doch gleichzeitig...

    edit 2: dein skript scheint bei mir auserdem überhaupt nicht zu laufen...ich drücke auf nicht beenden und nix pasiert

    2 Mal editiert, zuletzt von Hollywood (22. August 2007 um 11:27)

  • also ich kapier nicht was du willst sorry... ääähm die funktionsweiße / theorie deines "chats" erscheint mir auch nicht ganz logisch... naja vielleicht kann jemand anderes helfen / sich da eher reindenken...

    greetz oli

    EDIT:

    hast du dir mein script überhaupt angeschaut??? das GUI läuft in einer schleife -> das ganze 10 sekunden -> außer du drückst den button "nicht beenden!" -> um das ganze zu verdeutlichen setze ich trotzdem danach die Var. wieder zurück und das GUI beendet sich wieder automatisch nach 10 Sek außer du drückst wieder den Button usw usw usw.....

    Einmal editiert, zuletzt von oliverh (22. August 2007 um 11:31)

  • Kleiner Vorschlag.
    Schau dir mal das an (keine Garantie das es komplett funktioniert)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    #NoTrayIcon

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

    Global $aUsers[2][5] = [["Andi","Marco","Geri","Kerstin","Meli"], _
    ["","","","",""]]
    Global $Label[5]
    Global $Status[5]
    Global $name, $key
    ;===============================================================================
    GUICreate("office.CHAT", 570, 200, 700, 200)
    GUISetIcon("C:\WINDOWS\system32\SHELL32.dll", 172)
    $But_Senden = GUICtrlCreateButton("Senden", 220, 160, 70, 20)
    $But_aktualisieren = GUICtrlCreateButton("Aktualisieren", 375, 10, 85, 30)
    $But_ProfilAendern = GUICtrlCreateButton("Profil ändern", 460, 10, 85, 30)
    $But_StatusOK = GUICtrlCreateButton("OK", 495, 75, 50, 20)
    $Combo_Status = GUICtrlCreateCombo("", 375, 45, 170, 30)
    GUICtrlSetData(-1, "online|beschäftigt|abwesend|in 5 minuten zurück|in 15 minuten zurück|in 30 minuten zurück|in 1 Stunde zurück", "online")

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

    For $i = 0 To UBound($aUsers,2)-1
    $Label[$i] = GUICtrlCreateLabel($aUsers[0][$i] & " ist", 380, 100+$i*20)
    $Status[$i] = GUICtrlCreateLabel("", 440, 100+$i*20)
    Next

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

    $Input_Nachricht = GUICtrlCreateInput("", 10, 160, 200, 20)
    $Edit_Verlauf = GUICtrlCreateEdit("", 10, 10, 360, 140)

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

    GUISetState()
    ;===============================================================================

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

    _Aktualisieren()
    AdlibEnable("_Aktualisieren",10000)

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    IniWrite("J:\IL\Immervoll\chatserver\golbalusers.ini", $name, "Status", "offline")
    IniWrite("J:\IL\Immervoll\chatserver\golbalusers.ini", $name, "Onlinestatus","offline")
    Exit
    Case $msg = $But_Senden
    $key = IniRead("J:\IL\Immervoll\chatserver\chatroom.ini", "Nachrichten", "Anzahl", "0")
    IniWrite("J:\IL\Immervoll\chatserver\chatroom.ini", "Nachrichten", $key, $name & ": " & GUICtrlRead($Input_Nachricht))
    $key = $key + 1
    IniWrite("J:\IL\Immervoll\chatserver\chatroom.ini", "Nachrichten", "Anzahl", $key)
    IniWrite(@ScriptDir & "\Profil.ini", "Server", "Anzahl", $key)
    _Aktualisieren()
    Case $msg = $But_aktualisieren
    _Aktualisieren()
    Case $msg = $But_ProfilAendern
    Run(@ScriptDir & "\profil ändern.exe")
    Case $msg = $But_StatusOK
    IniWrite("J:\IL\Immervoll\chatserver\golbalusers.ini", $name, "Onlinestatus",GUICtrlRead($Combo_Status))
    _Aktualisieren()
    EndSelect
    Wend
    ;===============================================================================
    Func _Aktualisieren()
    Local $tmp, $i
    Local $nachricht = _IniLesen()

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

    $letztes = IniRead(@ScriptDir & "\Profil.ini", "Server", "Anzahl", "0")
    For $i = 0 To UBound($aUsers,2)-1
    $aUsers[1][$i] = IniRead("J:\IL\Immervoll\chatserver\golbalusers.ini", $aUsers[1][$i] , "Onlinestatus","")
    Next

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

    For $i = 0 to UBound($nachricht)-1
    $tmp &= $nachricht[$i] & @crlf
    NExt
    GuiCtrlSetData($Edit_Verlauf,$tmp)

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

    ControlFocus("office.CHAT", "Senden", 3)

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

    For $i = 0 To UBound($aUsers,2)-1
    Switch $aUsers[1][$i]
    Case "online"
    GUICtrlSetColor($Label[$i], 0x00ff00)
    GuiCtrlSetData($Status[$i],$aUsers[1][$i])
    Case "beschäftigt"
    GUICtrlSetColor($Label[$i], 0x0000ff)
    GuiCtrlSetData($Status[$i],$aUsers[1][$i])
    Case "abwesend"
    GUICtrlSetColor($Label[$i], 0xff0000)
    GuiCtrlSetData($Status[$i],$aUsers[1][$i])
    Case "offline"
    GUICtrlSetColor($Label[$i], 0x888888)
    GuiCtrlSetData($Status[$i],$aUsers[1][$i])
    EndSwitch
    Next

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

    Return
    EndFunc
    ;===============================================================================
    Func _IniLesen()
    Dim $nachricht[1] = [""]

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

    $key = IniRead("J:\IL\Immervoll\chatserver\chatroom.ini", "Nachrichten", "Anzahl", 0)
    $name = IniRead(@ScriptDir & "\Profil.ini", "Persönliches", "Name", "kein Name")
    If $key <> 0 Then
    ReDim $nachricht[$key]
    For $i = 0 To $key
    $nachricht[$i] = IniRead("J:\IL\Immervoll\chatserver\chatroom.ini", "Nachrichten", $key, "0")
    Next
    EndIf

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

    Return $nachricht
    EndFunc
    ;===============================================================================

    [/autoit]

    läßt sich sicher noch kürzen und optimieren. Vor allem diese unzähligen Schreib/Lesezugriffe sollten weg.

    Viele Grüße
    Stilgar

    [Edit]
    Die letzte Funktion war überflüssig.

    2 Mal editiert, zuletzt von Stilgar (22. August 2007 um 14:06)