令狐大虾 发表于 2025-4-22 23:26:45

[已解决]请帮忙修改一下代码显示百分比谢谢

本帖最后由 令狐大虾 于 2025-4-27 19:38 编辑

<div class="blockcode"><blockquote>#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>

; 创建GUI窗口
Local $hGUI = GUICreate("WIM释放工具", 400, 150)
Local $idProgress = GUICtrlCreateProgress(20, 20, 360, 30)
Local $idLabel = GUICtrlCreateLabel("准备中...", 20, 70, 360, 20)
GUISetState(@SW_SHOW)

; 定义wimlib命令参数
Local $sWimFile = "64w7.wim"    ; WIM文件路径
Local $sTargetDir = "D:\Extracted"            ; 释放目标目录
Local $sWimlibPath = @ScriptDir & "\wimlib-imagex.exe" ; 工具路径

; 启动命令行进程(隐藏窗口)
Local $iPID = Run($sWimlibPath & ' apply "' & $sWimFile & '" 1 "' & $sTargetDir & '"', "", @SW_HIDE)

While 1
    ; 读取实时输出
    Local $sOutput = StdoutRead($iPID)
    If @error Then ExitLoop

    ; 解析进度百分比(示例输出行:"Progress: 50.00%")
    If StringRegExp($sOutput, "Progress:\s*(\d+\.\d+)%") Then
      Local $aMatches = StringRegExp($sOutput, "(\d+\.\d+)", 1)
      If Not @error Then
            GUICtrlSetData($idProgress, $aMatches)
            GUICtrlSetData($idLabel, "进度: " & $aMatches & "%")
      EndIf
    EndIf
    Sleep(100)
WEnd

; 检查执行结果
If ProcessWaitClose($iPID, 0) = 0 Then
      MsgBox(64, "成功", "WIM文件已成功释放")
EndIf
进度条不出现0%到100%提示



zhaoceshi 发表于 2025-4-22 23:49:08

$iPID = Run($sCommand, "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD) 这里的格式就不对,你改成$iPID = Run(@ComSpec & " /c " & $sCommand, "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

令狐大虾 发表于 2025-4-23 21:28:49

zhaoceshi 发表于 2025-4-22 23:49
$iPID = Run($sCommand, "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD) 这里的格式就不对,你改成$iPID =...

改成这样也没用,不会出现进度条。而且运行时候一闪而过

redapple2008 发表于 2025-4-24 09:11:52

https://www.autoitx.com/forum.php?mod=viewthread&tid=59621&highlight=ghost%2B%E8%BF%9B%E5%BA%A6%E6%9D%A1

zhaoceshi 发表于 2025-4-25 20:33:58

本帖最后由 zhaoceshi 于 2025-4-25 21:06 编辑

; 创建GUI窗口
Local $hGUI = GUICreate("WIM释放工具", 400, 150)
Local $idProgress = GUICtrlCreateProgress(20, 20, 360, 30)
Local $idLabel = GUICtrlCreateLabel("准备中...", 20, 70, 360, 20)
GUISetState(@SW_SHOW)

; 定义wimlib命令参数
Local $sWimFile = "64w7.wim" ; WIM文件路径
Local $sTargetDir = "D:\Extracted" ; 释放目标目录
Local $sWimlibPath = @ScriptDir & "\wimlib-imagex.exe" ; 工具路径

; 启动命令行进程(隐藏窗口)
Local $iPID = Run(@ComSpec & " /c " & $sWimlibPath & ' apply "' & $sWimFile & '" 1 "' & $sTargetDir & '"', "", @SW_HIDE, BitOR($STDERR_CHILD, $STDOUT_CHILD))
Local $sOutput = ""

While 1
        ; 读取实时输出
        Local $sOutput = StdoutRead($iPID)
        If @error Then ExitLoop
        Sleep(100)
        ConsoleWriteError($sOutput & @CRLF)
        ; 解析进度百分比(示例输出行:"Progress: 50.00%")
        Local $aMatches = StringRegExp($sOutput, "\((\d+)%\)", 1)
        If Not @error Then
                GUICtrlSetData($idProgress, $aMatches)
                GUICtrlSetData($idLabel, "进度: " & $aMatches & "%")
        EndIf


WEnd
; 检查执行结果
If ProcessWaitClose($iPID) = 0 Then
        Exit (MsgBox(64, "成功", "WIM文件已成功释放"))
EndIf

修正了,你再试试




令狐大虾 发表于 2025-4-25 20:41:36

zhaoceshi 发表于 2025-4-25 20:33
验证了,可以正常运行

进度条和百分比都不能动啊

zhaoceshi 发表于 2025-4-25 21:04:03

令狐大虾 发表于 2025-4-25 20:41
进度条和百分比都不能动啊

再看5楼

令狐大虾 发表于 2025-4-26 14:20:04

本帖最后由 令狐大虾 于 2025-4-26 14:37 编辑

zhaoceshi 发表于 2025-4-25 21:04
再看5楼
编译失败呢。用的是AutoIt v3.3.16.1。如何才能成功编译呢

afan 发表于 2025-4-26 17:50:15

令狐大虾 发表于 2025-4-26 14:20
编译失败呢。用的是AutoIt v3.3.16.1。如何才能成功编译呢

你的代码编译前难道不先运行脚本文件调试的吗?
一看就至少缺少头文件吧

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>

令狐大虾 发表于 2025-4-26 18:08:42

本帖最后由 令狐大虾 于 2025-4-26 18:35 编辑

afan 发表于 2025-4-26 17:50
你的代码编译前难道不先运行脚本文件调试的吗?
一看就至少缺少头文件吧


加上也不行,不知是啥原因。用的是https://www.autoitx.com/forum.php?mod=viewthread&tid=73305&highlight=Autoit
版本

令狐大虾 发表于 2025-4-27 00:57:48

本帖最后由 令狐大虾 于 2025-4-27 10:51 编辑

zhaoceshi 发表于 2025-4-25 20:33
修正了,你再试试
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>

; 创建GUI窗口
Local $hGUI = GUICreate("WIM释放工具", 400, 150)
Local $idProgress = GUICtrlCreateProgress(20, 20, 360, 30)
Local $idLabel = GUICtrlCreateLabel("准备中...", 20, 70, 360, 20)
GUISetState(@SW_SHOW)

; 定义wimlib命令参数
Local $sWimFile = "64w7.wim" ; WIM文件路径
Local $sTargetDir = "D:\Extracted" ; 释放目标目录
Local $sWimlibPath = @ScriptDir & "\wimlib-imagex.exe" ; 工具路径

; 启动命令行进程(隐藏窗口)
Local $iPID = Run(@ComSpec & " /c " & $sWimlibPath & ' apply "' & $sWimFile & '" 1 "' & $sTargetDir & '"', "", @SW_HIDE, BitOR($STDERR_CHILD, $STDOUT_CHILD))
Local $sOutput = ""

While 1
      ; 读取实时输出
      Local $sOutput = StdoutRead($iPID)
      If @error Then ExitLoop
      Sleep(100)
      ConsoleWriteError($sOutput & @CRLF)
      ; 解析进度百分比(示例输出行:"Progress: 50.00%")
      Local $aMatches = StringRegExp($sOutput, "\((\d+)%\)", 1)
      If Not @error Then
                GUICtrlSetData($idProgress, $aMatches)
                GUICtrlSetData($idLabel, "进度: " & $aMatches & "%")
      EndIf


WEnd
; 检查执行结果
If ProcessWaitClose($iPID) = 0 Then
      Exit (MsgBox(64, "成功", "WIM文件已成功释放"))
EndIf


运行出错啊。是不是和wimlib-imagex版本有关呢。我发现Local $iPID = Run(@ComSpec & " /c " & $sWimlibPath & ' apply "' & $sWimFile & '" 1 "' & $sTargetDir & '"', "", @SW_HIDE, BitOR($STDERR_CHILD, $STDOUT_CHILD))加了BitOR($STDERR_CHILD, $STDOUT_CHILD))就会运行出错,是不是和安装的AU3版本有关?

令狐大虾 发表于 2025-4-27 13:02:01

zhaoceshi 发表于 2025-4-25 20:33
修正了,你再试试

我看你的图片里面上面还有别的代码吧?

afan 发表于 2025-4-27 13:52:10

都告诉你编译前要先运行脚本,看看是否正常,在 SciTE 里面控制台信息会很清楚。还一意孤行的直接编译,然后发个exe文件的错误提示,毛用?

#include <AutoItConstants.au3>

令狐大虾 发表于 2025-4-27 16:24:12

afan 发表于 2025-4-27 13:52
都告诉你编译前要先运行脚本,看看是否正常,在 SciTE 里面控制台信息会很清楚。还一意孤行的直接编译,然 ...

谢谢,成功了。

令狐大虾 发表于 2025-4-29 02:09:50

zhaoceshi 发表于 2025-4-25 20:33
修正了,你再试试

请教将wimlib-imagex更改为dism命令释放进度条并不会滚动如何修改代码呢
页: [1]
查看完整版本: [已解决]请帮忙修改一下代码显示百分比谢谢