为什么这个GuiControl不会在每个周期更新我的gui?

时间:2013-09-20 18:18:51

标签: autohotkey

以下是相关代码:

#Persistent
#SingleInstance, Force
#NoEnv

Gui, 2:New
Gui, 2: +Owner
Gui, 2:Color, 000000
Gui, 2:+hwndGUIaddress2
Gui, 2:Show, w500 h137, WinB
Gui, 2: +LastFound
WinSet, Transparent, 190

Gui, New
Gui, +Owner
Gui, Font, s8 cB4FFFF, Tahoma
Gui, Add, Text, x5  y5  w130, Filename:
;Gui, Add, Text, vProgress
Gui, Add, Text, x80 y5  w650 vFilename
Gui, Add, Text,     y+1 w650 vProgress

Gui, Color, EEAA99
Gui, +LastFound
Gui, +hwndGUIAddress1
WinSet, TransColor, EEAA99 225
Gui,    Show, w500 h137
OnMessage(0x03, "WM_MOVE")

Loop, D:\MOVIES_in\*.ts,0,1
{
    title = %A_LoopFileFullPath%
    LongPath = %A_LoopFileLongPath%
    SplitPath LongPath, FileName, OutDir, OutExtension, OutNameNoExt, OutDrive
    FileGetSize, Size_In, %A_LoopFileFullPath%
}


GuiControl, , Filename, %title%

Gosub Check_D_Drive

SetTimer, Check_D_Drive, 5000
return

Check_D_Drive:
{
    Loop, D:\MOVIES_out\*.ts,0,1
    {
        FileGetSize, Size_Out, %A_LoopFileFullPath%
    }

    sleep 5000

    Loop, D:\MOVIES_out\*.ts,0,1
    {
        FileGetSize, Size_Out2, %A_LoopFileFullPath%
    }

    complete:= Size_Out / Size_In
    msgbox,,,%complete%,1
    GuiControl,, Progress, %complete%

    if (  complete > .98 )
    {
        if (%Size_Out% == %Size_Out2%)
        {
            SetTimer, Check_I_Drive, Off
            msgbox Job is complete
        }
    }
}
return
;---------------------------------------------------------------------------------
WM_MOVE()
{
    global GUIAddress1, global GUIAddress2
    WinGetPos, mainX, mainY, Width, Height, Ahk_id %GUIAddress1%
    WinMove, Ahk_id %GUIAddress2%,, %mainX%, %mainY%
    WinSet, AlwaysOnTop,, Ahk_id %GUIAddress1%
}

Msgbox运行正常。我只是没有在我的GUI中看到更新。

1 个答案:

答案 0 :(得分:0)

如果您将问题仅限于更新,则可以正常使用

Gui, New
Gui, +Owner
Gui, Font, s8 cB4FFFF, Tahoma
Gui, Add, Text, x5  y5  w130, Filename:
;Gui, Add, Text, vProgress
Gui, Add, Text, x80 y5  w650 vFilename
Gui, Add, Text,     y+1 w650 vProgress
Gui, Show


loop, 100
{
  Random, Size_Out , 1000000, 100000000
  Random, Size_In , 1000000, 100000000

  complete:= Size_Out / Size_In
  GuiControl,, Filename, %A_Index%
  GuiControl,, Progress, %complete%
  Sleep, 1000

}

你的问题必须在其他地方。

使用MsgBox进行测试是有问题的,因为它 改变循环的焦点和运行时间。

在搜索问题而不是MsgBox时, 你可以尝试显示 使用工具提示检查完成的值 如果它真的在更新。

Tooltip, %complete%

您遇到问题的另一个原因是您运行两个 GUI 同时(不能从你的剧本判断,但你 在那里有第二个GUI。

如果这是您的问题并且工具提示显示正确的值, 看看这个example如何命名guis以及如何更新 特定的。