Wartehinweis

  • Hallo,
    ich habe da eine Idee und wollt die AutoIt-Experten einmal fragen, ob so etwas überhaupt geht.

    Ich Installiere ein Programm mit AutoIt. Am Anfang des Scripts steht da ein Wartehinweis.
    Da ich den Wartehinweis für einige Scripte brauche, habe ich mir eine UDF dafür geschrieben.
    Hier die UDF:

    [autoit]


    ; #FUNCTION# ============================================================================================================================================
    ; Funktions Name : _Wartehinweis
    ; Beschreibung : Funktion zum anzeigen des Wartehinweis während einer Installation.
    ;
    ; Syntax : _Wartehinweis($Programm, $Installationsdauer[, $Neustart])
    ;
    ; Parameter : $Programm = Name des zu installierenden Programms, ($_Program).
    ; $Installationsdauer = Dauer der Installation, ($_Time).
    ; $Neustart [Optional], False (Standard) = Keinen zusätzlichen Hinweis wegen eines Neustarts anzeigen,
    ; True = Zusätzlichen Hinweis wegen eines Neustarts anzeigen, [$_Newstart].
    ;
    ; Rückgabewert(e) : Erfolg: Return-Code 1.
    ; Fehler: Nichts.
    ;
    ; Includes : Keine.
    ; AutoIt Version : 3.3.8.1
    ; Funktions Autor : BigRox
    ; Anmerkung(en) : Die Installationsdauer muss als String im Format: "XX,XX" angegeben werden.
    ; =======================================================================================================================================================
    Func _Wartehinweis($_Program, $_Time, $_Newstart = False)

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

    Local $_A, $_Text_with, $_Text_without, $_X, $_Row[5]

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

    ; Variablen für die Texte für des SplashScreens festlegen.
    $_Row[1] = @LF & 'Das Programm "' & $_Program & '" wird nun'
    $_Row[2] = @LF & "installiert und eingerichtet."
    $_Row[3] = @LF & @LF & "Bitte warten Sie: (Dauer: c.a. " & $_Time & " Min.)"
    $_Row[4] = @LF & "(+ Neustart)."

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

    ; Die längste Zeile ermitteln und demnach die horizontale Pixelzahl errechnen.
    If StringLen($_Row[3]) > StringLen($_Row[1]) Then
    $_X = (StringLen($_Row[3]) * 12) + (2 * 28)
    Else
    $_X = (StringLen($_Row[1]) * 13) + (2 * 28)
    EndIf

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

    ; Text für die Anzeige im SplashScreen zusammensetzen.
    $_Text_with = $_Row[1] & $_Row[2] & $_Row[3] & $_Row[4]
    $_Text_without = $_Row[1] & $_Row[2] & $_Row[3]
    ; Anzeigen des Splash-Screens mit des Wartehinweis (immer im Vordergrund).
    $_A = 16 ; Attribut für immer im Vordergrund.
    If $_Newstart Then
    SplashTextOn("Wartehinweis", $_Text_with, $_X, 225, -1, 15, $_A, "Times New Roman", 20)
    Else
    SplashTextOn("Wartehinweis", $_Text_without, $_X, 200, -1, 15, $_A, "Times New Roman", 20)
    EndIf

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

    ; <Sleep> damit man den Splash-Screen auch komplett lesen kann.
    Sleep(5000)
    ; Anzeigen des Splash-Screens mit des Wartehinweis (nicht immer im Vordergrund).
    $_A = 18 ; Attribut für nicht immer im Vordergrund.
    If $_Newstart Then
    SplashTextOn("Wartehinweis", $_Text_with, $_X, 225, -1, 15, $_A, "Times New Roman", 20)
    Else
    SplashTextOn("Wartehinweis", $_Text_without, $_X, 200, -1, 15, $_A, "Times New Roman", 20)
    EndIf

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

    Return (1)

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

    EndFunc

    [/autoit]


    Es erscheint also zuerst der Wartehinweis im Vordergrund, dann wartet die Funktion 5 Sekunden (damit man den Hinweis auch lesen kann) und dann erscheint der selbe Hinweis nochmals aber dieses mal im Hintergrund (damit man die Fenster des Installationsprogramms vollständig sehen kann).
    Das ganze Script sieht dann in etwa so aus:

    [autoit]


    Scritpkopf
    ;Aufruf der Funktion.
    _Wartehinweis("Opera","2,5",True)
    ;das eigentliche Installationsprogramm wird ausgeführt.
    Fenster des Installationsprogramms...
    ;Opera wird Eingerichtet usw.
    Nur noch der statische Wartehinweis ist zu sehen.
    ;Der Wartehinweis wird ausgeblendet.
    SplashOff()
    ; Script beenden.
    Exit

    [/autoit]

    Nun die Frage:
    Da sich der Hinweis sich ja bis zum Ende des Scripts nicht mehr ändert sieht man nach der Installation keinen Fortschrit o.ä. mehr (außer das flackern der HDD-LED ist das einzige "Lebenszeichen" des PC's.
    Da aber nach der Installation meistens noch einiges kopiert, verschoben usw. wird, währe es schöner wenn sich dann im Wartehinweis auch etwas tut (z.B. eine Punktreihe, die alle Sekunde um einen Punkt länger wird).

    Zur Lösung müsste man doch den gesamten SplashScren jede Sekunde aktualisieren.
    Oder kann man nur den Teil mit der Punktreihe aktualisieren und den Rest (also den Programmnamen usw.) erhalten ?

    Eine andere Möglichkeit währe eventuell einen ganz eigenen Hinweis (ToolTip) anzeigen der ständig aktualisiert würde, aber geht das überhaupt einen SplashScreen statisch anzeigen und gleichzeitig einen ständig aktualisierten ToolTip anzeigen ?
    Würde das ständige aktualisieren eventuell auch den Installationsvorgang stören ?
    (langsamer würde das Programm auf jeden Fall, aber eine Sekunde mehr würde mich nicht stören).

    Das im Moment alles nur so eine Idee, aber es stört mich halt immer irgendwie, dass man vorm PC sitzt und aufs Scriptende wartet und sich dabei ständig fragt: "Tut sich da noch etwas oder ist der Kasten schon längst abgestürzt".

    MfG:
    BigRox