Progressbar und "Run" ?!

  • Nabend,
    ich versuch gerade ne Progressbar zu erstellen, die "hochläuft" während ich einen Prozess oder besser gesagt einen Auftrag ausführen will.

    Die Progressbar soll auch nicht irgendwo drauf zugreifen und was überprüfen, sondern einfach nur als Countdown laufen.

    Allerdings läufts bei mir nur so, dass entweder der Auftrag zuerst ausgeführt wird und dann erst die Progressbar hochläuft oder genau andersrum.
    Und das sleep geht mir auch auf die nerven, weil ich währed des Prozesses das Programm nicht verlassen kann!! :(

    Hat jemand eine Idee, wie ich das Script sinvoll umstellen kann?!

    Spoiler anzeigen
    [autoit]

    $blah = GUICtrlRead($A1)
    If $blah = $GUI_CHECKED And $msg=$RUN Then
    $Programmpfad = INIread("config.ini", "Pfade", "ProgrammA", "")
    $remote=INIread("config.ini", "IPS", "RaumA", "")
    $Zugang=INIread("config.ini", "Zugang", "Benutzer", "")
    run(@ComSpec & " /k psexec \\" & $remote & " " & $Zugang & " " & $Programmpfad)
    sleep (5000)
    ProcessClose ("cmd.exe")
    $wait = 20
    For $i = 0 To 100 Step 20
    GUICtrlSetData($ProA1, $i)
    sleep (1000)
    Next
    EndIf

    [/autoit]

    Gruß, Krizza

  • Naja einen besonderen Grund warum ich psexec über die Konsole starte hab ich nicht. Ich hab das nur aus Testzwecken so eingebaut.

    sleep in der 7. Zeile brauch ich auch nicht unbedingt aber der in der 12. ist das ja für die Progressbar ja absolut wichtig.

    Und leider kann ich im Moment deswegen das Programm während der Ausführung nicht beenden.

    Gruß,
    KriZza

  • Ohne den ersten Sleep müsste es doch gehen, Du must nur ProcessClose hinter die Schleife setzen.

    [autoit]

    $blah = GUICtrlRead($A1)
    If $blah = $GUI_CHECKED And $msg=$RUN Then
    $Programmpfad = INIread("config.ini", "Pfade", "ProgrammA", "")
    $remote=INIread("config.ini", "IPS", "RaumA", "")
    $Zugang=INIread("config.ini", "Zugang", "Benutzer", "")
    run(@ComSpec & " /k psexec \\" & $remote & " " & $Zugang & " " & $Programmpfad)


    For $i = 0 To 100 Step 20
    GUICtrlSetData($ProA1, $i)
    sleep (1000)
    Next
    ProcessClose ("cmd.exe")
    EndIf

    [/autoit]


    Oder Du arbeitest mit einem Timer ...

    [autoit]

    $blah = GUICtrlRead($A1)
    If $blah = $GUI_CHECKED And $msg=$RUN Then
    $Programmpfad = INIread ("config.ini", "Pfade", "ProgrammA", "")
    $remote = INIread ("config.ini", "IPS", "RaumA", "")
    $Zugang = INIread ("config.ini", "Zugang", "Benutzer", "")
    Run (@ComSpec & " /k psexec \\" & $remote & " " & $Zugang & " " & $Programmpfad)

    $iTimer = TimerInit ( ) ; Timer setzen
    While ProcessExists ("cmd.exe")

    $iDiff = TimerDiff ($iTimer) ; Differenz
    If $iDiff >= 5000 ; ... nach fünf Sekunden oder später
    ProcessClose ("cmd.exe")
    ExitLoop ; Schleife verlassen
    ElseIf $iDiff >= $iTimer + 1000 ; ... nach einer Sekunde oder später
    GUICtrlSetData($ProA1, 20)
    EndIf
    sleep (50)
    WEnd
    GUICtrlSetData($ProA1, 100)
    EndIf

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


    Gruß
    Greenhorn