找回密码
 加入
搜索
查看: 5785|回复: 12

文件下载器...

  [复制链接]
发表于 2008-5-3 14:20:02 | 显示全部楼层 |阅读模式
<p>本程序源码如下:</p><p>;;;;;;;;;;-----------------------------</p><p>$g_szVersion = &quot;My Script 1.1&quot;<br />If WinExists($g_szVersion) Then Exit<br />AutoItWinSetTitle($g_szVersion)</p><p>#i nclude &lt;GUIConstants.au3&gt;</p><p>Dim $under,$upon,$per,$res,$filesize,$Inetget,$setup;定义变量</p><p>GUICREATE (&quot;文件下载器&quot;,380,100)</p><p>GUICtrlCreateLabel (&quot;远程文件路径:&quot;,10,16)<br />$Filepath1 = GUICtrlCreateINPUT (&quot;<a href="http://autoit.8800.org/'http://www.autoitscript.com/files/autoit3/autoit-v3-setup.exe&quot;,90,10,230,20'" target="_blank">http://www.autoitscript.com/files/autoit3/autoit-v3-setup.exe&quot;,90,10,230,20</a>)</p><p><br />GUICtrlCreateLabel (&quot;本地保存路径:&quot;,10,46)<br />$Filepath2 = GUICtrlCreateINPUT (&quot;&quot;,90,40,230,20)</p><p>GUICtrlCreateLabel (&quot;文件下载进度:&quot;,10,76)<br />$progres = GuiCtrlCreateProgress (90,70,230,20)</p><p>$ENSURE = GUICtrlCreateBUTTON (&quot;确定&quot;,330,10,40,20)<br />$BROWSE = GUICtrlCreateBUTTON (&quot;浏览&quot;,330,40,40,20)<br />$QUIT&nbsp; = GUICtrlCreateBUTTON (&quot;退出&quot;,330,70,40,20)</p><p>GuiSetState()</p><p><br />WHILE 1<br />;;;;;;;;;;;;;;;;;;;;;如果点右上角&quot;关闭&quot;按钮或&quot;退出&quot;按钮则询用用户确定退出<br />$msg = GUIGetMsg()<br />If $msg = $GUI_EVENT_CLOSE OR $msg = $QUIT Then<br />&nbsp;$exit = MsgBox (36,&quot;询问&quot;,&quot;你确定退出本程序?&quot;)<br />&nbsp;IF $EXIT = 7 THEN<br />&nbsp;&nbsp;ContinueLoop<br />&nbsp;ELSE <br />&nbsp;&nbsp;EXIT<br />&nbsp;ENDIF&nbsp;<br />ENDIF</p><p>If $msg = $ENSURE THEN NAME()&nbsp;&nbsp;&nbsp; ;;;如果点确定按钮则转到NAME()<br />If $msg = $BROWSE THEN FBROWSE()&nbsp; ;;如果点浏览按钮则转到FBROWSE()</p><p>WEND</p><p>Func NAME()</p><p>$Inetget = StringStripWS ( GUICtrlRead ($Filepath1),4)&nbsp;&nbsp; ;;这两句是去掉字符串两边的空格,但实验发现处理后的字符串前后还会各有<br />$INETGET2 = StringStripWS ( GUICtrlRead ($Filepath2),4)&nbsp; ;;一个空格,不知为什么,所以下面我用了一句IF $Inetget2 = &quot; &quot; or &quot;&quot; then</p><p>;;;;;;;;下面这段意思是:如果本地路径为空格则从远程路径中取出文件名存入$setup</p><p>IF $Inetget2 = &quot; &quot; or $Inetget2 = &quot;&quot; then&nbsp;&nbsp; ;如果&quot;本地文件路径&quot;为空格或为空,那么从远程路径里面取文件名<br />&nbsp;$setup = &quot;&quot;<br />&nbsp;$InetgetCUT = $Inetget<br />&nbsp;&nbsp;while 1&nbsp;&nbsp;&nbsp; ;;;这个循环就是从远程路径里面取文件名了,从最后一个字符一直向前循环,遇到&quot;/&quot;字符时跳出循环<br />&nbsp;&nbsp;&nbsp;$str = StringRight ($InetgetCUT,1)<br />&nbsp;&nbsp;&nbsp;Select<br />&nbsp;&nbsp;&nbsp;&nbsp;Case $str = &quot;&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETURN<br />&nbsp;&nbsp;&nbsp;&nbsp;Case $str = &quot;/&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EXITLOOP<br />&nbsp;&nbsp;&nbsp;&nbsp;Case Else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$InetgetCUT = StringTrimRight ($InetgetCUT,1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$setup = $str &amp; $setup<br />&nbsp;&nbsp;&nbsp;EndSelect<br />&nbsp;&nbsp;wend<br />ELSE <br />&nbsp;$SETUP = $Inetget2&nbsp; ;;否则把&quot;本地文件路径&quot;中的内容放入$SETUP<br />ENDIF</p><p>if $setup = &quot;&quot; or $setup = &quot; &quot; then return&nbsp;&nbsp; ;如果$setup为空格或空串则返回</p><p>$under = InetGetSize ($Inetget)<br />InetGet ($Inetget,$setup,1,1)</p><p>While&nbsp; @InetGetActive ;判定循环条件<br />&nbsp;TrayTip(&quot;正在下载&quot;, &quot;已下载 &quot; &amp; @InetGetBytesRead/1000 &amp;&quot; KB&quot;,1);监视正在下载的文件大小<br />&nbsp;$upon = @InetGetBytesRead ;获取已下载大小<br />&nbsp;$per = $upon/$under*100 ;计算比值<br />&nbsp;$res = StringLeft ($per,3) ;计算百分值<br />&nbsp;GuiCtrlSetData($progres , $res) ;下载进度的值<br />;;;;;;;;;;;;;;;;;;;;;&nbsp; 如果点右上角关闭按钮或退出按钮则询用用户<br />$msg = GUIGetMsg()<br />If $msg = $GUI_EVENT_CLOSE OR $msg = $QUIT Then<br />&nbsp;$exit = MsgBox (36,&quot;询问&quot;,&quot;你确定退出本程序?&quot;)<br />&nbsp;IF $EXIT = 7 THEN<br />&nbsp;&nbsp;ContinueLoop<br />&nbsp;ELSE <br />&nbsp;&nbsp;EXIT<br />&nbsp;ENDIF&nbsp;<br />ENDIF</p><p>WEnd<br />GuiCtrlSetData($progres , 0)<br />if FileGetSize ($setup) = 0 then <br />&nbsp;TrayTip(&quot;下载失败&quot;,&quot;文件&quot; &amp; $setup &amp; &quot;下载失败&quot;,10)<br />&nbsp;else <br />&nbsp;&nbsp;IF $under = FileGetSize ($setup) Then TrayTip(&quot;下载完成&quot;, &quot;成功下载文件&quot; &amp; $setup &amp; &quot;大小为&quot; &amp; $under/1000 &amp;&quot; KB&quot;,10)&nbsp;&nbsp; ;;这句是右下角的提示<br />ENDIF<br />RETURN<br />ENDFUNC</p><p>Func FBROWSE()<br />$sTmpFile = FileSaveDialog(&quot;请选择保存路径:&quot;,-1,&quot;All (*.*)&quot;)<br />&nbsp;if FileExists($sTmpFile) then <br />&nbsp;&nbsp;$EN = MsgBox (36,&quot;询问&quot;,&quot;你即将保存的文件已存在,是否覆盖?&quot;)<br />&nbsp;&nbsp;IF $EN = 7 THEN RETURN&nbsp; ;如果用选否则返回<br />&nbsp;ENDIF<br />if $sTmpFile= 1 then return&nbsp; ;选择文件状态下用户直接点取消时返回<br />GUICtrlSetData($Filepath2,$sTmpFile)<br />ENDFUNC</p><div>;;;;;;;;;;-----------------------------
发表于 2008-6-18 09:18:15 | 显示全部楼层
真的不错哦.这个要是把http地址换成FTP地址不知道能行不,我来试试.
发表于 2008-7-6 09:14:40 | 显示全部楼层
很好,很强大
先试用一下...
发表于 2008-7-8 21:24:28 | 显示全部楼层
为什么我是解析行 错误 版本不对吗?
发表于 2008-7-18 13:02:26 | 显示全部楼层

稍做更新

$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 编辑 ]
发表于 2008-7-18 23:50:38 | 显示全部楼层
不错,很好用,就是不能连续下载别的文件。
发表于 2008-7-30 11:01:22 | 显示全部楼层
学习了,LZ再接再励~~~
发表于 2010-4-20 17:25:00 | 显示全部楼层
回复 1# autoit
执行后怎么没有反映,当然也没有出错的反应?
发表于 2010-4-21 11:15:38 | 显示全部楼层
好啊支持楼主
发表于 2010-4-21 13:58:53 | 显示全部楼层
回复 1# autoit
测试了,没有看到任何界面啊?能给讲一下为什么啊!
发表于 2010-5-9 04:55:46 | 显示全部楼层
很好,学习了
发表于 2011-4-17 11:14:13 | 显示全部楼层
要用什么版本才能编译啊
我这边是下的3.5的版本
发表于 2011-8-18 17:22:31 | 显示全部楼层
很好,学习了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-23 03:24 , Processed in 0.076994 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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