Laufbalken parallel zum Skript

  • Moin zusammen,

    ich habe schon ein paar Installation-Scripte mit AutoIT umgesetzt. Aber jetzt find ich irgendwie keine Lösung. Auch Google war keine große Hilfe, evtl. steh ich auch nur auf der Leitung.

    Nun mal zu meinem Problem.
    Ich starte im Script den Installationsprozess an (Durch einen RunWait Aufruf). Funktioniert und läuft auch. Jetzt will ich den User vor dem Monitor eine Rückmeldung geben das der Rechner noch etwas tut. In Form eines GUI mit einem Laufbalken. Die Problematik ist aber das RunWait das Script pausiert. Habe schon mit „threads“ experimentiert, komme damit aber auch nicht weiter. Hier wird der GUI nicht aufgebaut.

    Hat jemand eine Idee bzw. einfach ein Beispiel Script zur Hand das z.B. Notepad.exe startet und parallel dazu einen Ladebalken sich bewegen läßt bis Notepad.exe wieder geschlossen wird.

    Schon mal Danke

    • Offizieller Beitrag

    Mit Hilfe der Timer-UDF ist sowas möglich:

    Spoiler anzeigen
    [autoit]


    #include <Timers.au3>

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

    $hGui = GUICreate('Test', 320, 120, 10, 10)

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

    DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 0) ; auf den klassischen Style umschalten
    $idProgress = GUICtrlCreateProgress(10, 10, 300, 30)
    DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 7) ; zurück zum Standard-Windowsstyle

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

    GUISetState()
    WinSetOnTop($hGui, '', 1)

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

    $iTimer = TimerInit()
    $iEndTime = 10000 ; <- Zeit in Millisekunden, bis Notepad automatisch geschlossen wird
    _Timer_SetTimer($hGui, 20, '_UpdateProgress')

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

    RunWait('Notepad.exe') ; <- wartet auf das beenden von Notepad

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

    _Timer_KillAllTimers($hGui)
    GUIDelete($hGui)
    Exit

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

    Func _UpdateProgress($hWnd, $Msg, $iIDTimer, $dwTime)
    #forceref $hWnd, $Msg, $iIDTimer, $dwTime
    Local $iTimerDiff = TimerDiff($iTimer)
    If $iTimerDiff > $iEndTime Then Return ProcessClose('Notepad.exe')
    Local $iPercent = Int(100 / $iEndTime * $iTimerDiff)
    GUICtrlSetData($idProgress, $iPercent)
    EndFunc

    [/autoit]
  • Ich bin mir jetzt nicht sicher was genau du dir vorstellst, aber vielleicht reicht dir ja auch bereits das hier:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <ProgressConstants.au3>

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

    $hWnd = GUICreate("Test", 200, 100)
    $cProgress = GUICtrlCreateProgress(10, 48, 180, 25, $PBS_MARQUEE)
    GUISetState()

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

    GUICtrlSendMsg($cProgress, $PBM_SETMARQUEE, True, 20)

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

    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]
  • Hallo,

    Oscar : Danke! ich denke mit dem Timerbeispiel von Dir komm ich weiter. Werd es nach den Feiertagen mal ausprobieren.

    name22: Danke für die kleine animation Doch deutlich eleganter als mit Schleifen das "permanente" Laufen zu realisieren.

    Ich geb ne Rückmeldung nach Pfingsten.

    In dem Sinn euch ein paar schöne Feiertage ;)

    AMG