找回密码
 加入
搜索
楼主: 顽固不化

如何接收命令行的7z解压进度?

 火... [复制链接]
 楼主| 发表于 2010-1-21 20:08:28 | 显示全部楼层
如果要效仿2楼的办法的话,建议在WHILE循环里加以个sleep(500),设置一个记载上次STDOUT数据的变量,每次循 ...

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



    这个开关把数据解到一个文件里,相当于生成一个没有压缩的7z文件。
发表于 2010-1-21 20:11:15 | 显示全部楼层
貌似你写过7Z自解压的软件吧  如炮制法!!
 楼主| 发表于 2010-1-21 20:37:09 | 显示全部楼层
貌似你写过7Z自解压的软件吧  如炮制法!!
lchl0588 发表于 2010-1-21 20:11


哈哈,那是使用现成的SFX。
发表于 2010-1-21 21:21:56 | 显示全部楼层
autoit官网上有不用dll的纯au3解压udf...

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

评分

参与人数 1金钱 +10 收起 理由
顽固不化 + 10 谢谢提示

查看全部评分

 楼主| 发表于 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更大家学习。结贴~~~~~~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-1-21 22:11:30 | 显示全部楼层
看了调用7zDLL的办法,基本确定可以解决进度条的问题了,里面的例子_7ZIPExtractEx_Example_using_Callback ...
顽固不化 发表于 2010-1-21 22:07



    + + 就是这个东西 不过这个是带dll的 0 0
 楼主| 发表于 2010-1-21 22:14:13 | 显示全部楼层
+ + 就是这个东西 不过这个是带dll的 0 0
rolaka 发表于 2010-1-21 22:11


还有不带的?没继续找,谢谢你啦,我有空再找找。
发表于 2010-1-21 22:27:05 | 显示全部楼层
楼主解决了吗  说下怎么解决的啊
 楼主| 发表于 2010-1-21 22:29:59 | 显示全部楼层
楼主解决了吗  说下怎么解决的啊
非典男人 发表于 2010-1-21 22:27

只针对7z解压的。不需要命令行了,直接调DLL解压。应该说不存在回显问题了。
发表于 2010-1-21 23:46:52 | 显示全部楼层
提供一个邪恶的思路:

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

嘎嘎嘎嘎。。。。。。。
 楼主| 发表于 2010-1-22 09:28:57 | 显示全部楼层
提供一个邪恶的思路:

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


这个思路也是不错的。
发表于 2010-1-22 10:29:01 | 显示全部楼层
老革命碰到新问题
发表于 2010-1-23 18:15:14 | 显示全部楼层
高深
发表于 2010-1-23 21:04:47 | 显示全部楼层
看不懂,先收
发表于 2010-1-24 08:27:17 | 显示全部楼层
一般是使用7ZSFX,而不是使用AU3接收解压进度
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-16 22:56 , Processed in 0.110113 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表