Anwendung und Fortschrittsbalken gleichzeitig starten

  • Hallo Community

    Habe hier im Forum viele schöne Beispiele von Progressbars gesehen.
    Zum Beispiel:
    autoit.de/wcf/attachment/4173/
    Das zugehörige GUI-Script:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    Opt('MustDeclareVars', 1)
    Example()
    Func Example()
    Local $progressbar1, $button, $wait, $s, $msg, $m
    GUICreate("My GUI Progressbar", 500, 100, 100, 200)
    $progressbar1 = GUICtrlCreateProgress(10, 10, 480, 20); Fortschrittsbalken
    $button = GUICtrlCreateButton("Start", 60, 50, 80, 30)
    GUISetState()
    $wait = 20; wait 20ms for next progressstep
    $s = 0; progressbar-saveposition
    Do
    $msg = GUIGetMsg()
    If $msg = $button Then
    GUICtrlSetData($button, "Stop")
    For $i = $s To 100
    $m = GUIGetMsg()
    If $m = -3 Then ExitLoop
    If $m = $button Then
    GUICtrlSetData($button, "Weiter")
    $s = $i;save the current bar-position to $s
    ExitLoop
    Else
    $s = 0
    GUICtrlSetData($progressbar1, $i)
    Sleep($wait)
    EndIf
    Next
    If $i > 100 Then
    GUICtrlSetData($button, "Start")
    EndIf
    EndIf
    Until $msg = $GUI_EVENT_CLOSE
    EndFunc ;==>Example

    [/autoit]


    Wie kann man in dieses GUI-Script einen Schalter einbauen der die ISO-Erstellung per CMD-Befehl und den Fortschrittsbalken beim Klick auf "Start" gleichzeitig startet ?
    Mein CMD-Befehl:

    Spoiler anzeigen
    [autoit]

    #include <Process.au3>
    $command = "OSCDIMG.exe -lGRUB -h -n -m -o ""C:\GRUB"" ""D:\IMAGES\GRUB-090324.iso"""
    _runDOS($command)

    [/autoit]


    Wenn es eine einfachere Progressbar gibt ist das auch OK, Hauptsache jemand zeigt mir wie ich sie gleichzeizig in Gang setze.
    Für jeden noch so kleinen Hinweis bin ich Euch schon dankbar !

    Gruß M.

    Einmal editiert, zuletzt von Macrostop (28. März 2009 um 21:29)

  • hmm autoit arbeitet zeilenweise.. Also so richtig gleichzeitig gibt´s eigentlich nicht. Aber meistens auch nicht nötig!

    Wieso startest du den CMD Befehl nicht innerhalb deines Scriptes?

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • Kennst du denn die Größe der iso-Datei bevor sie erstellt wird? Ansonsten seh ich keine guten chancen eine progressbar zu bauen.

    so könnte es gehen:

    $isofertig
    $isoaktuell

    Befehl ausführen
    Do
    $isoaktuell = FileGetSize(isodatei)
    GUICtrlSetData($progressbar1,$isoaktuell/$isofertig*100)

    Until $isoaktuell + 1 >= $isofertig

  • Vielen Dank für Eure Vorschläge

    Wenn ich´s richtig verstehe:

    [autoit]


    ; zuerst deklarieren ?
    $isofertig = ??? ; Größe der fertigen ISO-Datei ?
    $isoaktuell = ; was muß hierher ?

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

    ; Befehl ausführen
    Do
    $isoaktuell = FileGetSize(isodatei) ; check laufend die größe der erstellten Datei
    GUICtrlSetData($progressbar1,$isoaktuell/$isofertig*100) ; Formel die dem Progressbalken die Geschwindigkeit vorgibt ?

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

    Until $isoaktuell + 1 >= $isofertig ; bis die aktuelle größe + 1 größer oder gleich der Vorgabe sind ?

    [/autoit]


    Ist absolutes Neuland, deshalb muß ich leider verdammt viele Fragen stellen.
    zB. wohin muß der CMD-Befehl ?

    Gruß und Danke M.

  • Ok, ich erkläre es mal ausführlich.

    $isofertig speichert die Größe der fertigen Iso-Datei. Leider kann ich dir keinen Vorschlag machen wie du den bestimmen kannst.
    Edit:
    $isofertig = DirGetSize("C:\GRUB")
    Die fertige iso-Datei wird etwas größer sein denke ich, aber das macht nichts
    Editende

    $isoaktuell steuert zusammen mit $isofertig die Anzeige der progressbar. den wert kannst du am Anfang auf 0 setzen.

    der cmd-befehl muss dahin wo jetzt "; Befehl ausführen steht"

    In der schleife wird dann kontinuierlich die größe der Isodatei abgefragt. du muss noch den pfad und den dateinamen eintragen

    Eine Progressbar nimmt standardmäßig einen wert zwischen 1 und 100. es ist also sinnvoll, auszurechnen wieviel prozent
    ($isoaktuell/$isofertig*100)bereits fertig sind.

    das +1 kann man wohl auch weglassen, da hilft ausprobieren

    PS: in die schleife vllt noch ein Sleep(500)

    Wie gesagt, die Methode funktioniert nur wenn du die Größe der fertigen Iso-Datei bestimmen kannst.http://www.autoit.de/dokumentation_…CtrlSetData.htm

    Einmal editiert, zuletzt von Bitboy (25. März 2009 um 20:10)

  • Hallo Hallo

    Hab´s versucht so gut ich konnte:

    [autoit]

    $outfile = "C:\GRUB.iso"
    $isofertig = 504072192 ;kb
    $isoaktuell = 0
    ;Befehl ausführen
    $command = "mkisofs.exe -o " & $outfile & " ""C:\GRUB"""
    Run($command)
    Do
    $isoaktuell = FileGetSize($outfile); in kb
    $progressbar1 = GUICtrlCreateProgress(10, 10, 480, 20); Fortschrittsbalken
    GUICtrlSetData($progressbar1, $isoaktuell/$isofertig*100)
    Sleep(500)
    Until $isoaktuell + 1 >= $isofertig
    MsgBox(0 , "Info", " $isoaktuell = " & $isoaktuell & " kb ")

    [/autoit]


    Das ISO wird erstellt, aber der Fortschritt zeigt sich nicht.
    Die Schleife wird auch korrekt ausgeführt weil "MsgBox" direkt nach Ablauf der Kommandozeile erscheint.
    (Ich mußte "mkisofs" nehmen weil "oscdimg" die ISO-Größe anders anzeigt.)

    Wie muß die Progressbar genauer definiert werden ?

    Gruß M.

    Einmal editiert, zuletzt von Macrostop (25. März 2009 um 23:37)

  • [autoit]


    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    ;Zuerst die Gui Erstellen
    GUICreate("My GUI Progressbar", 500, 40, 100, 60) ;Ein leeres Fenster
    $progressbar1 = GUICtrlCreateProgress(10, 10, 480, 20); Fortschrittsbalken
    GUISetState(@SW_Show) ;Gui anzeigen

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

    $outfile = "C:\GRUB.iso"
    $isofertig = 504072192 ;kb
    $isoaktuell = 0
    ;Befehl ausführen
    $command = "mkisofs.exe -o " & $outfile & " ""C:\GRUB"""
    Run($command)
    Do
    $isoaktuell = FileGetSize($outfile); in kb
    GUICtrlSetData($progressbar1, $isoaktuell/$isofertig*100)
    Sleep(500)
    Until $isoaktuell + 1 >= $isofertig

    [/autoit]