$g_szVersion = "My Script 1.1"
If WinExists($g_szVersion) Then Exit
AutoItWinSetTitle($g_szVersion)
opt("onexitfunc","_Quit")
#include <GUIConstants.au3>
Dim $under, $upon, $per, $res, $filesize, $Inetget, $setup;定义变量
GUICreate("文件下载器", 380, 100)
GUICtrlCreateLabel("远程文件路径:", 10, 16)
$Filepath1 = GUICtrlCreateInput("http://www.autoitscript.com/files/autoit3/autoit-v3-setup.exe", 90, 10, 230, 20)
GUICtrlCreateLabel("本地保存路径:", 10, 46)
$Filepath2 = GUICtrlCreateInput("", 90, 40, 230, 20)
GUICtrlCreateLabel("文件下载进度:", 10, 76)
$progres = GUICtrlCreateProgress(90, 70, 230, 20)
$ENSURE = GUICtrlCreateButton("确定", 330, 10, 40, 20)
$BROWSE = GUICtrlCreateButton("浏览", 330, 40, 40, 20)
$QUIT = GUICtrlCreateButton("退出", 330, 70, 40, 20)
GUISetState()
While 1
;;;;;;;;;;;;;;;;;;;;;如果点右上角"关闭"按钮或"退出"按钮则询用用户确定退出
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Or $msg = $QUIT Then
$exit = MsgBox(36, "询问", "你确定退出本程序?")
If $exit = 7 Then
ContinueLoop
Else
Exit
EndIf
EndIf
$Inetget = StringStripWS(GUICtrlRead($Filepath1), 4) ;;这两句是去掉字符串两边的空格,但实验发现处理后的字符串前后还会各有
If $msg = $ENSURE Then
GUICtrlSetState($ENSURE, $GUI_DISABLE)
NAME() ;;;如果点确定按钮则转到NAME()
EndIf
If $msg = $BROWSE Then FBROWSE() ;;如果点浏览按钮则转到FBROWSE()
WEnd
Func NAME()
$INETGET2 = StringStripWS(GUICtrlRead($Filepath2), 4) ;;一个空格,不知为什么,所以下面我用了一句IF $Inetget2 = " " or "" then
;;;;;;;;下面这段意思是:如果本地路径为空格则从远程路径中取出文件名存入$setup
If $INETGET2 = " " Or $INETGET2 = "" Then ;如果"本地文件路径"为空格或为空,那么从远程路径里面取文件名
_nul()
If FileExists($setup) Then
$EN = MsgBox(36, "询问", "你即将保存的文件已存在,是否覆盖?")
If $EN = 7 Then Return ;如果用选否则返回
EndIf
Else
$setup = $INETGET2 ;;否则把"本地文件路径"中的内容放入$SETUP
EndIf
If $setup = "" Or $setup = " " Then Return ;如果$setup为空格或空串则返回
$under = InetGetSize($Inetget)
InetGet($Inetget, $setup, 1, 1)
While @InetGetActive ;判定循环条件
TrayTip("正在下载", "已下载 " & @InetGetBytesRead / 1024 & " KB", 1);监视正在下载的文件大小
$upon = @InetGetBytesRead ;获取已下载大小
$per = $upon / $under * 100 ;计算比值
$res = StringLeft($per, 3) ;计算百分值
GUICtrlSetData($progres, $res) ;下载进度的值
;;;;;;;;;;;;;;;;;;;;; 如果点右上角关闭按钮或退出按钮则询用用户
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Or $msg = $QUIT Then
$exit = MsgBox(36, "询问", "你确定退出本程序?")
If $exit = 7 Then
ContinueLoop
Else
Exit
EndIf
EndIf
WEnd
GUICtrlSetData($progres, 0)
If FileGetSize($setup) = 0 Then
TrayTip("下载失败", "文件" & $setup & "下载失败", 10)
Else
If $under = FileGetSize($setup) Then TrayTip("下载完成", "成功下载文件" & $setup & "大小为" & $under / 1000 & " KB", 10) ;;这句是右下角的提示
EndIf
Return
EndFunc ;==>NAME
Func FBROWSE()
_nul()
$sTmpFile = FileSaveDialog("请选择保存路径", -1, "All (*.*)", 16, $setup)
If FileExists($sTmpFile) Then
$EN = MsgBox(36, "询问", "你即将保存的文件已存在,是否覆盖?")
If $EN = 7 Then Return ;如果用选否则返回
EndIf
If $sTmpFile = 1 Then Return ;选择文件状态下用户直接点取消时返回
GUICtrlSetData($Filepath2, $sTmpFile)
EndFunc ;==>FBROWSE
Func _nul()
$setup = ""
$InetgetCUT = $Inetget
While 1 ;;;这个循环就是从远程路径里面取文件名了,从最后一个字符一直向前循环,遇到"/"字符时跳出循环
$str = StringRight($InetgetCUT, 1)
Select
Case $str = ""
Return
Case $str = "/"
ExitLoop
Case Else
$InetgetCUT = StringTrimRight($InetgetCUT, 1)
$setup = $str & $setup
EndSelect
WEnd
EndFunc ;==>_nul
Func _Quit()
If $upon<>$under Then FileDelete($setup)
EndFunc
[ 本帖最后由 jhwl 于 2008-7-18 14:20 编辑 ] |