顽固不化 发表于 2010-1-21 20:08:28

如果要效仿2楼的办法的话,建议在WHILE循环里加以个sleep(500),设置一个记载上次STDOUT数据的变量,每次循 ...

7Z的命令行,有个参数-so: write data to stdout,没查到怎么使用,怀疑可以用来屏显,不知可利用否?
llztt 发表于 2010-1-21 18:53 http://www.autoitx.com/images/common/back.gif


    这个开关把数据解到一个文件里,相当于生成一个没有压缩的7z文件。

lchl0588 发表于 2010-1-21 20:11:15

貌似你写过7Z自解压的软件吧如炮制法!!

顽固不化 发表于 2010-1-21 20:37:09

貌似你写过7Z自解压的软件吧如炮制法!!
lchl0588 发表于 2010-1-21 20:11 http://www.autoitx.com/images/common/back.gif

哈哈,那是使用现成的SFX。

rolaka 发表于 2010-1-21 21:21:56

autoit官网上有不用dll的纯au3解压udf...

直接用没有sleep的while试试看- - 跳的快 缓存区里积压的原因把?

顽固不化 发表于 2010-1-21 22:07:51

本帖最后由 顽固不化 于 2010-1-22 10:33 编辑

看了调用7zDLL的办法,基本确定可以解决进度条的问题了,里面的例子_7ZIPExtractEx_Example_using_Callback.au3:#include <GuiConstantsEx.au3>
#include <7Zip.au3>

$hGUI = GUICreate("_7ZIPExtractEx demo", 300, 200)

$ctlEdit = GUICtrlCreateEdit("", 10, 10, 280, 100)

$ctlProgress = GUICtrlCreateProgress(10, 130, 280, 20)

$ctlButton_Pack = GUICtrlCreateButton("Unpack!", 10, 167, 75, 23)

$ctlButton_Close = GUICtrlCreateButton("Close", 215, 167, 75, 23)

GUISetState()

$ArcFile = FileOpenDialog("Select archive", "", "Archive Files (*.7z;*.zip;*.gzip;*.bzip2;*.tar;*.rar)", 1, "", $hGUI)
If @error Then Exit

$sOutput = FileSelectFolder("Select output folder", "", 1, "", $hGUI)
If @error Then Exit

While 1
        $msg = GUIGetMsg()
        Switch $msg
                Case $GUI_EVENT_CLOSE, $ctlButton_Close
                        Exit
                Case $ctlButton_Pack
                        $retResult = _7ZipSetOwnerWindowEx($hGUI, "_ARCHIVERPROC")
                        If $retResult = 0 Then Exit MsgBox(16, "_7ZipAdd demo", "Error occured")
                       
                        $retResult = _7ZIPExtractEx($hGUI, $ArcFile, $sOutput, 1)
                       
                        If @error = 0 Then
                                MsgBox(64, "_7ZIPExtractEx demo", "Archive unpacked successfully", 0, $hGUI)
                        Else
                                MsgBox(64, "_7ZIPExtractEx demo", "Error occurred", 0, $hGUI)
                        EndIf
                        GUICtrlSetData($ctlProgress, 0)
                        GUICtrlSetData($ctlEdit, "")
        EndSwitch
WEnd

Func _ARCHIVERPROC($hWnd, $Msg, $nState, $ExInfo)
        Local $iFileSize, $iWriteSize, $iPercent = 0
       
        If $nState = 0 Then
                Local $EXTRACTINGINFO = DllStructCreate($tagEXTRACTINGINFO, $ExInfo)
               
                GUICtrlSetData($ctlEdit, DllStructGetData($EXTRACTINGINFO, "szSourceFileName") & @CRLF, 1)
       
                $iFileSize = DllStructGetData($EXTRACTINGINFO, "dwFileSize")
                $iWriteSize = DllStructGetData($EXTRACTINGINFO, "dwWriteSize")
       
                $iPercent = Int($iWriteSize / $iFileSize * 100)
       
                GUICtrlSetData($ctlProgress, $iPercent)
                Return 1
        EndIf
       
        If $nState = 2 Then GUICtrlSetData($ctlProgress, 100)
       
        Return 1
EndFunc所用的7-zip32.dll是3.11版,4.65版不行,要报错的。(已更换到能用的4.31)
附7Z_udf和7-zip32.dll更大家学习。结贴~~~~~~

rolaka 发表于 2010-1-21 22:11:30

看了调用7zDLL的办法,基本确定可以解决进度条的问题了,里面的例子_7ZIPExtractEx_Example_using_Callback ...
顽固不化 发表于 2010-1-21 22:07 http://autoitx.com/images/common/back.gif


    + + 就是这个东西 不过这个是带dll的 0 0

顽固不化 发表于 2010-1-21 22:14:13

+ + 就是这个东西 不过这个是带dll的 0 0
rolaka 发表于 2010-1-21 22:11 http://www.autoitx.com/images/common/back.gif

还有不带的?没继续找,谢谢你啦,我有空再找找。

非典男人 发表于 2010-1-21 22:27:05

楼主解决了吗说下怎么解决的啊

顽固不化 发表于 2010-1-21 22:29:59

楼主解决了吗说下怎么解决的啊
非典男人 发表于 2010-1-21 22:27 http://www.autoitx.com/images/common/back.gif
只针对7z解压的。不需要命令行了,直接调DLL解压。应该说不存在回显问题了。

remme 发表于 2010-1-21 23:46:52

提供一个邪恶的思路:

根据文件大小估算7z的压缩时间,然后滚动进度条,剩最后一格的时候停滞,等判断压缩完毕后进度条也随之走完。

嘎嘎嘎嘎。。。。。。。

顽固不化 发表于 2010-1-22 09:28:57

提供一个邪恶的思路:

根据文件大小估算7z的压缩时间,然后滚动进度条,剩最后一格的时候停滞,等判断压 ...
remme 发表于 2010-1-21 23:46 http://www.autoitx.com/images/common/back.gif

这个思路也是不错的。

bob 发表于 2010-1-22 10:29:01

老革命碰到新问题
:face (24):

xlcwxl 发表于 2010-1-23 18:15:14

高深
:face (35):

catcher 发表于 2010-1-23 21:04:47

:face (7):看不懂,先收

skyfree 发表于 2010-1-24 08:27:17

一般是使用7ZSFX,而不是使用AU3接收解压进度
页: 1 [2] 3
查看完整版本: 如何接收命令行的7z解压进度?