Winzip Extraktfortschritt mit GUI Progress darstellen ... möglich?

  • Hallo zusammen,

    ich weiß wie ich eine Zip File mit Autoit entpacke und wie ich eine Progressbar erstelle.

    Ist es möglich beides zusammenzuführen so das ich den Extraktfortschritt von Winzip in meiner GUI darstellen kann?


    Für jeden Vorschlag bin ich Dankbar


    Gruß

    Norman

  • Mit AutoIt ist (so gut wie) alles möglich. :D
    Probiere es mal mit der Funktion ProcessGetStats().

    So sieht das ungefähr in AutoIt aus:

    [autoit]


    ;Codeausschnitt
    ;----[...]----

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

    $iPID = Run($sWinZip, '', @SW_HIDE)
    $iZipSize = FileGetSize($sZipPath)

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

    Do
    $aStats = ProcessGetStats($iPID, 1)
    $iPercentage = (100/$iZipSize)*$aStats[3]
    GUICtrlSetData($hProgressBar, Round($iPercentage))
    Until $iPercentage <= 100

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

    ;----[...]----

    [/autoit]

    Ich habe das bis jetzt nur mit 7-Zip (beim Packen) ausprobiert, aber prinzipiell sollte es mit vielen Programmen funktionieren.

  • Danke für deine Antwort.
    Habe es noch nicht probiert aber das sieht schonmal gut aus.

    EDIT:

    hab es jetzt mal wie folgt ausprobiert nur leider funktioniert zwar das entpacken aber das wird mir nicht in der GUI angezeigt.

    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <WindowsConstants.au3>
    $Form1 = GUICreate("Form1", 585, 109, 192, 124)
    $hProgressBar = GUICtrlCreateProgress(96, 24, 270, 17)
    $Button1 = GUICtrlCreateButton("Button1", 136, 64, 75, 25)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1

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

    $iPID = Run("c:\program files\winrar\winrar.exe e -o- c:\data\vcds-lite.rar c:\data\", '', @SW_HIDE)
    $iZipSize = FileGetSize("c:\data\vcds-lite.rar")

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

    Do
    $aStats = ProcessGetStats($iPID, 1)
    $iPercentage = (100/$iZipSize)*$aStats[3]
    GUICtrlSetData($hProgressBar, Round($iPercentage))
    Until $iPercentage <= 100

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

    EndSwitch
    WEnd

    [/autoit]

    Gruß
    Norman

    Einmal editiert, zuletzt von Norman Bates (22. September 2012 um 23:43)

  • Ist es möglich beides zusammenzuführen so das ich den Extraktfortschritt von Winzip in meiner GUI darstellen kann?


    Nein! Da je nach Quelldatei WinZip unterschiedliche Packugsdichten hat ist es unmöglich eine realistischen Fortschritt vorherzusagen/berechnen der auf alle Fälle zutrifft,

    mfg autoBert

  • Ich hab mal folgendes probiert....

    [autoit]


    #include <File.au3>
    #include <Array.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    $Form1 = GUICreate("Form1", 509, 106, 192, 124)
    $Label1 = GUICtrlCreateLabel("", 120, 32, 307, 20)
    ;~ GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Label2 = GUICtrlCreateLabel("0%", 424, 64, 50, 28)
    GUICtrlSetFont(-1, 14, 800, 0, "MS Sans Serif")
    ;~ $Label3 = GUICtrlCreateLabel("%", 456, 64, 20, 28)
    ;~ GUICtrlSetFont(-1, 14, 800, 0, "MS Sans Serif")
    $Button1 = GUICtrlCreateButton("Start", 24, 40, 75, 25)
    $Button2 = GUICtrlCreateButton("Close", 24, 72, 75, 25)
    $Progress1 = GUICtrlCreateProgress(120, 72, 294, 17)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button2
    Exit
    case $Button1
    Run('wzunzip -d -o "C:\data\Bedienungsanleitungen.zip" "c:\data"')
    Sleep(200)
    While 1
    If ProcessExists("WZUNZIP.EXE") Then
    $FileList = _FileListToArray("c:\data\Bedienungsanleitungen\","*.*",1)
    If @error = 1 Then
    MsgBox(0, "", "Keine Ordner gefunden.",1)
    ;~ Exit
    EndIf
    If @Error=4 Then
    MsgBox (0,"","Keine Dateien gefunden.")
    Exit
    EndIf
    For $i = 1 To UBound($FileList)-1
    GUICtrlSetData($Label1,$FileList[$i])
    GUICtrlSetData($Progress1,$i*(100/$FileList[0]))
    GUICtrlSetData($Label2, Round($i*(100/$FileList[0]))& "%")
    Sleep(500)
    Next
    Else
    MsgBox(0,"", "ENDE",1)
    Exit
    EndIf
    WEnd
    EndSwitch
    WEnd

    [/autoit]

    Sieht schon ganz gut aus nur leider nicht so wie ich das gerne hätte.

    Er ist sehr schnell bei 100% obwohl das eigentliche entpacken noch nicht fertig ist.

    Hat einer ne Idee wie ich $Progress und $Label2 anpassen muss damit er es richtig darstellt?


    Gruß

    Norman