找回密码
 加入
搜索
查看: 311|回复: 2

[系统综合] 【已解决】执行解压文件,进度条百分比不能同步求助!

[复制链接]
发表于 2023-8-6 17:08:03 | 显示全部楼层 |阅读模式
本帖最后由 h111666b 于 2023-8-6 20:59 编辑

代码如下:


#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>

Global $hProgress, $hLabel

; 创建GUI窗口
$hGUI = GUICreate("进度条", 300, 100)
$hProgress = GUICtrlCreateProgress(10, 30, 280, 20)
$hLabel = GUICtrlCreateLabel("0%", 140, 60)
GUISetState(@SW_SHOW)

; 执行解压
Run("wimlib-imagex apply D:\win7.wim 1 G:\文件夹", "", @SW_HIDE)

; 更新进度条和百分比标签
For $i = 1 To 100
        GUICtrlSetData($hProgress, $i)
        GUICtrlSetData($hLabel, $i & "%")
        Sleep(50)
Next

; 关闭GUI窗口
GUIDelete($hGUI)


     此代码执行进度条和百分比,执行解压(RUN) 不会关联进度条和百分比,大文件和小文件解压时进度条和百分比都是一样的进度,不会快也不会慢,求助!

本帖子中包含更多资源

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

×
发表于 2023-8-6 19:41:52 | 显示全部楼层
Global $hProgress, $hLabel, $hTitle = '进度条'

; 创建GUI窗口
$hGUI = GUICreate($hTitle, 300, 100)
$hProgress = GUICtrlCreateProgress(10, 30, 280, 20)
$hLabel = GUICtrlCreateLabel("100%", 140, 60, 100)
GUISetState(@SW_SHOW)

; 执行解压
RunCmd("wimlib-imagex apply win7.wim 1 文件夹")

; 关闭GUI窗口
Sleep(3000)
GUIDelete($hGUI)

Func RunCmd($sCommand)
        Local $sOutput, $aSRE
        Local $iPID = Run($sCommand, @ScriptDir, @SW_HIDE, 6)
        While 1
                If ProcessExists($iPID) = 0 Then
                        $hTitle = 'Done applying WIM image.'
                        WinSetTitle($hGUI, '', $hTitle)
                        GUICtrlSetData($hProgress, 100)
                        GUICtrlSetData($hLabel, 100 & "%")
                        ExitLoop
                EndIf

                $sOutput = StdoutRead($iPID, False, True)
                $sOutput = BinaryToString($sOutput, 4)

                If StringRegExp($sOutput, 'Applying|done', 0) Then
                        ;ConsoleWrite($sOutput & @CRLF)

                        $aSRE = StringRegExp($sOutput, 'Creating.+?\((\d+?)\%\).+?$', 1)
                        If Not @error Then
                                If $hTitle <> 'Creating files' Then
                                        $hTitle = 'Creating files'
                                        WinSetTitle($hGUI, '', $hTitle)
                                EndIf
                                GUICtrlSetData($hProgress, $aSRE[0])
                                GUICtrlSetData($hLabel, $aSRE[0] & "%")
                        EndIf
                        $aSRE = StringRegExp($sOutput, 'Extracting.+?\((\d+?)\%\).+?$', 1)
                        If Not @error Then
                                If $hTitle <> 'Extracting file data' Then
                                        $hTitle = 'Extracting file data'
                                        WinSetTitle($hGUI, '', $hTitle)
                                EndIf
                                GUICtrlSetData($hProgress, $aSRE[0])
                                GUICtrlSetData($hLabel, $aSRE[0] & "%")
                        EndIf
                        $aSRE = StringRegExp($sOutput, 'Applying.+?\((\d+?)\%\).+?$', 1)
                        If Not @error Then
                                If $hTitle <> 'Applying metadata to files' Then
                                        $hTitle = 'Applying metadata to files'
                                        WinSetTitle($hGUI, '', $hTitle)
                                EndIf
                                GUICtrlSetData($hProgress, $aSRE[0])
                                GUICtrlSetData($hLabel, $aSRE[0] & "%")
                        EndIf
                EndIf
                Sleep(100)
        WEnd
EndFunc   ;==>RunCmd
 楼主| 发表于 2023-8-6 20:58:54 | 显示全部楼层
感谢高手 3131210 ,解决了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-5 14:55 , Processed in 0.074289 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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