GUI mit mehreren Buttons (Skripten): Wie kann ich mir optisch anzeigen lassen, welche Skripte derzeit laufen (aktiv sind)?

  • Servus zusammen,

    ich arbeite derzeit an einer GUI mit mehreren Buttons, über die ich verschiedene Skripte starte.
    Die Skripte sollen mir am PC wiederholende Arbeitsaufgaben erleichtern, die ich immer wieder benötige (z.B. Einloggen in Email-Account, Auswertung meiner Rechnungen etc.).
    Manche dieser Skripte laufen versteckt im Hintergrund und das auch mal gerne bis zu 20 min lang, manche Skripte laufen auch parallel.

    Meine Frage:
    Gibt es die Möglichkeit sich optisch anzeigen zu lassen, welches Skript gerade aktiv ist? In der Taskleiste sieht man ja nur das/die Autoit-Symbol(e), weiß aber nicht, welches Skript gerade aktiv ist, zudem wird die Taskleiste bei mir immer wieder automatisch versteckt.
    Optimal wäre es, wenn sich die Farbe des jeweiligen Buttons in meiner GUI verändern würde, solange das Skript noch läuft.
    Wisst ihr wie man so etwas realisieren kann bzw. habt ihr eine andere Idee wie man sich das möglichst einfach anzeigen lassen kann (ohne eine Progress-Bar)?

    Vielen Dank
    tobius

    Einmal editiert, zuletzt von tobius (10. Juni 2013 um 18:14)

  • Da du die Skripte ja vom Hauptskript aus startest (wahrscheinlich mit Run), kannst du ja mit Hilfe der zurückgegebenen PID und ProcessExists überprüfen, ob das Skript noch läuft. Das kannst du dir dann irgendwie in deiner GUI anzeigen lassen (zum Beispiel durch Ändern der Farbe der jeweiligen Buttons).

  • Sorry für die Verspätung.
    Danke,
    PID und ProcessExists lassen sich auslesen, wäre super wenn ich das dafür
    einsetzen könnte.

    while processexists("x")
    Ändere "Farbe des Buttons" auf => z.B. grün ; was setz ich hier für "Farbe des Buttons" ein, gibts da eine Farbänderungsfunktion etc.?
    Sleep (5000)
    wend

    oder

    While 1
    If processexists("x") then
    Ändere "Farbe des Buttons" auf => z.B. grün (welche Funktion?)
    else
    Behalte Farbe => grau
    endif
    Sleep (5000)
    Wend

  • was setz ich hier für "Farbe des Buttons" ein, gibts da eine Farbänderungsfunktion etc.?


    Farbe (englisch Color) eines Buttons (= eines Controls, abgekürzt Ctrl) in einer GUI ändern (= setzen, englisch set:(

    [autoit]

    GUICtrlSetColor

    [/autoit]


    Deswegen ist AutoIt so einfach. :D
    Grün wäre übrigens die Farbe 0x00FF00.

    MfG James

    PS: Und bitte für Code folgende Tags benutzen:

    Code
    [spoiler][autoit]dein Skript hier[/autoit][/spoiler]
  • Wenn du deine Skripte parallel laufen lässt und alle unterschiedlich lange laufen, dann macht dein Ansatz mit While keinen Sinn.

    Dann kannst du es zum Beispiel so lösen:
    Buttons erstellen und Programme dazu definieren:

    Spoiler anzeigen
    [autoit]


    Global $aButton[10][4] ; Für die 10 die Anzahl deiner Buttons/Programme einfügen
    For $i = 0 To 9 ; Für die 9 die Anzahl deiner Buttons/Programme - 1 einfügen
    $aButton[$i][3] = 0
    Next

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

    $aButton[0][0] = GUICtrlCreateButton("Skript0", X, Y [, width [, height [, style [, exStyle]]]]) ; Deinen Button an gewünschter Position erstellen.
    $aButton[0][1] = "D:\AutoIT\Skripte\Skript0.exe" ; Pfad des Skripts in Spalte 1 des Arrays schreiben
    $aButton[0][2] = "Skript0.exe" ; Name des Skripts in Spalte 2 des Arrays schreiben

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

    $aButton[1][0] = GUICtrlCreateButton("Skript1", X, Y [, width [, height [, style [, exStyle]]]]) ; Deinen Button an gewünschter Position erstellen.
    $aButton[1][1] = "D:\AutoIT\Skripte\Skript1" ; Pfad des Skripts in Spalte 1 des Arrays schreiben
    $aButton[1][2] = "Skript1.exe" ; Name des Skripts in Spalte 2 des Arrays schreiben

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

    ;...

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

    $aButton[9][0] = GUICtrlCreateButton("Skript9", X, Y [, width [, height [, style [, exStyle]]]]) ; Deinen Button an gewünschter Position erstellen.
    $aButton[9][1] = "D:\AutoIT\Skripte\Skript9.exe" ; Pfad des Skripts in Spalte 1 des Arrays schreiben
    $aButton[9][2] = "Skript9.exe" ; Name des Skripts in Spalte 2 des Arrays schreiben

    [/autoit]


    Skripte starten:

    Spoiler anzeigen
    [autoit]


    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $aButton[0][0]
    _StartSkript(0)
    Case $aButton[1][0]
    _StartSkript(1)
    ;...
    Case $aButton[9][0]
    _StartSkript(9)
    EndSwitch

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

    Func _StartSkript($iArrayLine)
    $aButton[$iArrayLine][3] = Run($aButton[$iArrayLine][1])
    EndFunc

    [/autoit]


    Laufende Skripte überprüfen:

    Spoiler anzeigen
    [autoit]


    Func _ActiveScripts()
    $iActiveScripts = 0
    For $i = 0 To 9 ; Für die 9 die Anzahl deiner Buttons/Programme - 1 einfügen
    If $aButton[$i][3] <> 0 Then ; Wenn der Prozess gestartet wurde ist $aButton[$i][3] <> 0
    If ProcessExists($aButton[$i][3]) Then ; Wenn der Prozess weiterhin existiert:
    GUICtrlSetColor($aButton[$i][0], 0x00ff00) ; Button-Textfarbe grün färben
    $iActiveScripts += 1
    Else ; Wenn der Prozess nicht mehr läuft:
    GUICtrlSetColor($aButton[$i][0], 0x000000) ; Button-Textfarbe schwarz färben
    $aButton[$i][3] = 0
    EndIf
    EndIf
    Next
    Return $iActiveScripts ; Funktion gibt die Anzahl der aktuell laufenden Skripte zurück (vielleicht ist das ja nützlich ;) )
    EndFunc

    [/autoit]


    So, endlich fertig :D Ich garantiere nicht auf Funktionalität (ungetestet) und warne vor eventuellen Schreibfehlern, da ich das ganze gerade hier in der Antwort geschrieben habe, da ich gerade kein SciTE/AutoIT zur Verfügung habe.

    Ich hoffe das ist ein gute Lösungsansatz für dich und vielleicht kannst du das ja so einbauen ;) Vielleicht gibt es sogar eine noch kürzere Lösung, aber das ist denke ich schon recht gut gelöst ;)

    Liebe Grüße und eine gute Nacht
    Joriktos


    Edit:
    Übrigens setzt

    [autoit]

    GUICtrlSetColor

    [/autoit]

    nur die Textfarbe des Buttons, nicht die Hintergrund-/Buttonfarbe selbst. Dafür gibt es

    [autoit]

    GUICtrlSetBkColor

    [/autoit]

    ;)
    Und mit

    [autoit]

    #include <ButtonConstants.au3>
    ; ...
    GUICtrlSetStyle($b1, $GUI_SS_DEFAULT_BUTTON)

    [/autoit]

    setzt man es wieder zurück ;)

    Da es hier doch einige falsch machen:

    Zitat von einem User dieses Forums

    Die Standard-Standart eines Flamingos ist einbeinig. ;)

    2 Mal editiert, zuletzt von Joriktos (3. Juni 2013 um 00:43)