zzPhoenix 发表于 2010-11-26 16:25:28

循环进度条的代码怎么使用?

本帖最后由 zzPhoenix 于 2010-11-28 22:43 编辑

本人菜鸟,高手莫笑。我想写个脚本来判断电脑是否需要安装一些软件,软件有静默参数可以实现静默安装。但是不知道什么时候才能安装完,平时只是基本靠硬盘灯来判断安装完了没{:face (245):} 。今天从坛子里看到一段进度条代码很是有趣,想用这段代码来加个循环进度条。但是这段代码有点问题,位置是在左下角,但是这个Label的位置不知道怎么改,而且还有就是软件都安装完了这个进度条还有?代码如下,请问如而后使用??或者说只要能有个进度条提示啥的都行!#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Run("L:\常用软件"&"\360安全卫士 7.0正式版.exe /S","",@SW_SHOW)
Opt("WinTitleMatchMode", 2)
$AForm2 = GUICreate("AForm1", 400,100,40,@DesktopHeight-50,$WS_POPUP, $WS_EX_LAYERED+$WS_EX_TOPMOST+$WS_EX_TOOLWINDOW)
GUISetBkColor(0xABCDEF)
for $i=0 to 9
$w=15
$pro= GUICtrlCreateLabel("□",40+$w*$i, 20, 135, 10)
GUICtrlSetBkColor($pro, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor($pro, 0xffffff)
Next
GUISetState(@SW_SHOW)
AdlibRegister("xh",3300)
Func xh()
$h=15
$i=0
Do
$i = $i + 1
$pro= GUICtrlCreateLabel("■",40+$h*($i-1), 20, 10, 10)
GUICtrlSetColor(-1, 0x00ff00)
Sleep(300)
GUICtrlDelete($pro)
if $i=10 Then ExitLoop
Until $i>=10
EndFunc
_API_SetLayeredWindowAttributes($AForm2, 0xABCDEF)
GUISetState(@SW_SHOW)
While 1
      $nMsg = GUIGetMsg()
      Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exitloop
      EndSwitch
WEnd

Func _API_SetLayeredWindowAttributes($hwnd, $i_transcolor, $Transparency = 255, $isColorRef = False)

    Local Const $AC_SRC_ALPHA = 1
    Local Const $ULW_ALPHA = 2
    Local Const $LWA_ALPHA = 0x2
    Local Const $LWA_COLORKEY = 0x1
    If Not $isColorRef Then
      $i_transcolor = Hex(String($i_transcolor), 6)
      $i_transcolor = Execute('0x00' & StringMid($i_transcolor, 5, 2) & StringMid($i_transcolor, 3, 2) & StringMid($i_transcolor, 1, 2))
    EndIf
    Local $Ret = DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $hwnd, "long", $i_transcolor, "byte", $Transparency, "long", $LWA_COLORKEY + $LWA_ALPHA)
    Select
      Case @error
            Return SetError(@error, 0, 0)
      Case $Ret = 0
            Return SetError(4, 0, 0)
      Case Else
            Return 1
    EndSelect
EndFunc   ;==>_API_SetLayeredWindowAttributes

the886 发表于 2010-11-27 14:30:56

学习一下.........

zzPhoenix 发表于 2010-11-27 14:39:30

沙发真是让我汗啊{:face (207):}

№ツ遺夨◆ミ 发表于 2010-11-28 00:20:52

静默安装还需要提示。楼主真风趣。{:face (245):}   建议7z压缩。。。。安装快。不加静默安装参数。岂不更好?

yhxhappy 发表于 2010-11-28 10:41:56

我觉得进度条是不太现实的,但可以显示一个循环滚动的进度条,判断 RUN 返回的PID进程是否存在,如果不存在则表示安装完成了

zzPhoenix 发表于 2010-11-28 22:38:10

回复 5# yhxhappy
对就是这个意思,这段代码就是这样的,但是
$pro= GUICtrlCreateLabel("□",40+$w*$i, 20, 135, 10)这个Label的位置不知道怎么改,还有就是不知道这个Function运行完了之后为什么不能退出?

nmgwddj 发表于 2010-11-29 02:50:49

安装软件一般都是通过判断进程是否存在 然后判断软件是否安装完毕。
另外软件安装器也一般都是绿色的软件

yhxhappy 发表于 2010-11-29 17:02:11

那做一个循环滚动的滚动条可以吧


#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>
#Include <SendMessage.au3>

$Form1 = GUICreate("Form1", 406, 102, 192, 124)
$Progress = GUICtrlCreateProgress(24, 28, 361, 20, $PBS_MARQUEE)                                                ;样式必须为:$PBS_MARQUEE,否则看不到效果
$Button = GUICtrlCreateButton("开始", 124, 60, 100, 25)

GUISetState(@SW_SHOW)

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button
                        _SendMessage(GUICtrlGetHandle($Progress), $PBM_SETMARQUEE, True, 50)                ;向进度条发送数据,使之能一段一段的重复显示,数字越小,滚动越快
      EndSwitch
WEnd
页: [1]
查看完整版本: 循环进度条的代码怎么使用?