Programmablauf

  • HI,
    Und zwar habe Ich eine Check Funktion die Prüft ob Programme gestartet sind und gibt dieses dann in einer Editbox aus.
    Doch wenn ich die Checkfunktion starte, kann ich nix anderes in meinem Programm machen weil ich als in der funktion sitzte.
    Weder Buttons betätigen (Starten oder Beenden der Programme) oder das Script selbst zu beenden.

    Nun is meine Frage wie ich es hin bekomme das ich trotz Checken der Prozesse alles andere meines Tools betätigen kann bzw. Funktioniert.

    Spoiler anzeigen
    [autoit]


    ;Scriptauszug
    .
    .
    .
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $CheckButton
    If Boolean = False Then
    $Boollean = True
    Else
    $Boollean = False
    EndIf
    .
    .
    .
    EndSwitch

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

    If $Boollean = True Then
    ProzessCheck()
    EndIf

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

    WEnd

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

    Func ProzessCheck()
    ;Programm1
    If ProcessExists( "Programm1.exe") Then
    GUICtrlSetData( $Programm1Button, "stop" )
    GUICtrlSetData( $Programm1Label, "[aktiv]" )
    Else
    GUICtrlSetData( $Programm1Button, "start" )
    GUICtrlSetData( $Programm1Label, "[inaktiv]" )
    _GUICtrlEdit_AppendText ( $InfoList, StringAddCR ( @HOUR & ":" & @MIN & ":" & @SEC & " - " & "Programm1 wurde Beendet" & @CRLF ))
    EndIf
    ;Programm2
    If ProcessExists( "Programm2.exe") Then
    GUICtrlSetData( $Programm2Button, "stop" )
    GUICtrlSetData( $Programm2Label, "[aktiv]" )
    Else
    GUICtrlSetData( $Programm2Button, "start" )
    GUICtrlSetData( $Programm2Label, "[offline]" )
    _GUICtrlEdit_AppendText ( $InfoList, StringAddCR ( @HOUR & ":" & @MIN & ":" & @SEC & " - " & "Programm2 wurde Beendet" & @CRLF ))
    EndIf
    .
    .
    .
    ;bis Programm6
    Sleep( 10000 )
    EndFunc

    [/autoit]

    mfg clockgen

    Einmal editiert, zuletzt von clockgen (1. Januar 2011 um 19:33)

  • @clockgen,

    verwende AdlibRegister und du bist dieses Problem los:

    Spoiler anzeigen
    [autoit]

    ;Scriptauszug
    .
    .
    .
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $CheckButton
    If Boolean = False Then
    AdlibRegister("ProzessCheck",10000)
    Else
    AdlibUnRegister("ProzessCheck")
    EndIf
    .
    .
    .
    EndSwitch

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

    WEnd

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

    Func ProzessCheck()
    ;Programm1
    If ProcessExists( "Programm1.exe") Then
    GUICtrlSetData( $Programm1Button, "stop" )
    GUICtrlSetData( $Programm1Label, "[aktiv]" )
    Else
    GUICtrlSetData( $Programm1Button, "start" )
    GUICtrlSetData( $Programm1Label, "[inaktiv]" )
    _GUICtrlEdit_AppendText ( $InfoList, StringAddCR ( @HOUR & ":" & @MIN & ":" & @SEC & " - " & "Programm1 wurde Beendet" & @CRLF ))
    EndIf
    ;Programm2
    If ProcessExists( "Programm2.exe") Then
    GUICtrlSetData( $Programm2Button, "stop" )
    GUICtrlSetData( $Programm2Label, "[aktiv]" )
    Else
    GUICtrlSetData( $Programm2Button, "start" )
    GUICtrlSetData( $Programm2Label, "[offline]" )
    _GUICtrlEdit_AppendText ( $InfoList, StringAddCR ( @HOUR & ":" & @MIN & ":" & @SEC & " - " & "Programm2 wurde Beendet" & @CRLF ))
    EndIf
    .
    .
    .
    ;bis Programm6
    EndFunc

    [/autoit]

    du musst aber auch den sleep aus ProzessCheck entfernen

    stayawayknight, auch im OnEvent-Modus kommt er nicht an AdlibRegister oder einer ähnlichen Hilfskontruktion aus
    frohes neues Jahr autoBert

  • Danke für die Schnelle Hilfe

    autoBert
    genau sowas hab ich gesucht


    Nun habe ich meine Überlegung ein wenig geändert

    Und zwar soll die Funktion ProzessCheck nur noch die GUI aktuellisieren.
    Denn wen ich einen Prozess Manuel Beende soll es ja wieder von stop auf start beim button und beim Label von aktiv in inaktiv umschallten
    oder umgekehrt wenn ich den Prozess Manuel starte.

    Dazu hab ich in der Funktion die Ausgabe Entfernt und das Label + Button da die Funktion die ganze Zeit aktiv sein soll.
    Und die Funktion mit AdlibRegister am Anfang der while schleife gestartet.
    Doch das Problem ist das nichts aktuellisiert wird oder fehlerhaft (der Prozess wird als aktiv angezeigt obwohl er es nicht ist.

    Nun ist die Frage mach ich etwas Falsch und/oder gibt es eine bessere Variante ?

    Spoiler anzeigen
    [autoit]


    ;Scriptauszug
    .
    .
    .
    While 1
    AdlibRegister( "ProzessCheck" )

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

    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    AdlibUnRegister( "ProzessCheck" )
    Exit
    .
    .
    .
    EndSwitch

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

    WEnd

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

    Func ProzessCheck()
    ;Programm1
    If ProcessExists( "Programm1.exe") Then
    GUICtrlSetData( $Programm1Button, "stop" )
    GUICtrlSetData( $Programm1Label, "[aktiv]" )
    Else
    GUICtrlSetData( $Programm1Button, "start" )
    GUICtrlSetData( $Programm1Label, "[inaktiv]" )
    _GUICtrlEdit_AppendText ( $InfoList, StringAddCR ( @HOUR & ":" & @MIN & ":" & @SEC & " - " & "Programm1 wurde Beendet" & @CRLF ))
    EndIf
    ;Programm2
    If ProcessExists( "Programm2.exe") Then
    GUICtrlSetData( $Programm2Button, "stop" )
    GUICtrlSetData( $Programm2Label, "[aktiv]" )
    Else
    GUICtrlSetData( $Programm2Button, "start" )
    GUICtrlSetData( $Programm2Label, "[offline]" )
    _GUICtrlEdit_AppendText ( $InfoList, StringAddCR ( @HOUR & ":" & @MIN & ":" & @SEC & " - " & "Programm2 wurde Beendet" & @CRLF ))
    EndIf
    .
    .
    .
    ;bis Programm6
    EndFunc

    [/autoit]
  • Klick mal hier drauf:

    [autoit]

    AdlibRegister ;<-- Hier klicken.

    [/autoit]


    Und liest dir die ganze Seite mal durch. Danach Setzt du das AdlibRegister, MIT einem Intervall in Millisekunden als 2ten Parameter, vor die Endlosschleife. Und das AdlibUnregister kannst du entfernen, das bringt in diesem Fall nichts.

  • Danke habs hin bekommen.
    Mein Fehler wahr das ich AdlibRegister in der while Schleife immer wieder neu Aufgerufen habe und somit die Zeit als resetet wurde.

    AdlibUnregister hab ich entfernt

    Spoiler anzeigen
    [autoit]


    .
    .
    .
    $Boollean = True

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

    While 1
    While $Boollean == True
    AdlibRegister( "ProzessCheck", 5000 )
    $Boollean = False
    WEnd
    .
    .
    .

    [/autoit]