亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > VBScript > 正文

vbs 多線程下載實現代碼

2020-06-26 18:33:28
字體:
來源:轉載
供稿:網友
昨天重新看了下《深入挖掘Windows腳本技術》(原文不知道是誰寫的,網上到處都是)。里面提到了vbs多線程下載,今天嘗試寫了一下
 
話說還是閑來練手,初步實現了自己認為的“多線程”下載。(至于是不是多線程,可以參考12樓鏈接) 
為避免冗余,省了一些錯誤檢查。我覺得沒多大實際用途,有興趣的兄弟一起學習討論唄。歡迎大家指正: 

復制代碼代碼如下:

'by wankoilz 

url=InputBox("輸入完整下載地址:") 
threadCount=InputBox("輸入線程數(不超過10吧,太多就累贅了):") 
fileName=GetFileName(url) 
filePath=GetFilePath(WScript.ScriptFullName) 
Set ohttp=CreateObject("msxml2.xmlhttp") 
Set ado=CreateObject("adodb.stream") 
Set fso=CreateObject("scripting.filesystemobject") 
ado.Type=1 
ado.Mode=3 
ado.Open 
ohttp.open "Head",url,True 
ohttp.send 
Do While ohttp.readyState<>4 
WScript.Sleep 200 
Loop 
'獲得文件大小 
fileSize=ohttp.getResponseHeader("Content-Length") 
ohttp.abort 
'創建一個和下載文件同樣大小的臨時文件,供下面ado分段重寫 
fso.CreateTextFile(filePath&"TmpFile",True,False).Write(Space(fileSize)) 
ado.LoadFromFile(filePath&"TmpFile") 

blockSize=Fix(fileSize/threadCount):remainderSize=fileSize-threadCount*blockSize 
upbound=threadCount-1 
'定義包含msxml2.xmlhttp對象的數組,·成員數量便是線程數 
'直接 Dim 數組名(變量名) 是不行的,這里用Execute變通了一下 
Execute("Dim arrHttp("&upbound&")") 
For i=0 To UBound(arrHttp) 
startpos=i*blockSize 
endpos=(i+1)*blockSize-1 
If i=UBound(arrHttp) Then endpos=endpos+remainderSize 
Set arrHttp(i)=CreateObject("msxml2.xmlhttp") 
arrHttp(i).open "Get",url,True 
'分段下載 
arrHttp(i).setRequestHeader "Range","bytes="&startpos&"-"&endpos 
arrHttp(i).send 
Next 
Do 
WScript.Sleep 200 
For i=0 To UBound(arrHttp) 
If arrHttp(i).readystate=4 Then 
'每當一個線程下載完畢就將其寫入臨時文件的相應位置 
ado.Position=i*blockSize 
MsgBox "線程"&i&"下載完畢!" 
ado.Write arrHttp(i).responseBody 
arrHttp(i).abort 
complete=complete+1 
End If 
Next 
If complete=UBound(arrHttp)+1 Then Exit Do 
timeout=timeout+1 
If timeout=5*30 Then 
'根據文件大小設定 
MsgBox "30秒超時!" 
WScript.Quit 
End If 
Loop 
If fso.FileExists(filePath&fileName) Then fso.DeleteFile(filePath&fileName) 
fso.DeleteFile(filePath&"TmpFile") 
ado.SaveToFile(filePath&fileName) 
MsgBox "文件下載完畢!" 

Function GetFileName(url) 
arrTmp=Split(url,"/") 
GetFileName=arrTmp(UBound(arrTmp)) 
End Function 

Function GetFilePath(fullname) 
arrTmp=Split(fullname,"/") 
For i=0 To UBound(arrTmp)-1 
GetFilePath=GetFilePath&arrTmp(i)&"/" 
Next 
End Function 


測試下載地址: 
復制代碼代碼如下:

http://www.49028c.com/images/logo.gif 


VBS實現 多線程 補充

今天有人發郵件問我一個問題: 

想請教一下VBS中INPUTBOX函數能否超時關閉? 
如果可以的話,應該如何超時關閉輸入框? 萬分感謝 

乍一看這是不可能實現的,因為InputBox函數本身沒有超時關閉的參數,而且程序會一直等待InputBox返回才繼續運行,后面的語句不可能在InputBox返回之前執行。 

如果VBS能實現高級語言的多線程的話……只可惜VBS不可能實現多線程,但是可以用setTimeout方法模擬“多線程”。 

復制代碼代碼如下:

Dim IE 
Set IE = CreateObject("InternetExplorer.Application") 
IE.Navigate "about:blank" 
Set window = IE.Document.parentWindow 
id = window.setTimeout(GetRef("on_timeout"),3000,"VBScript") 
name = InputBox("Please enter your name","InputBox Timeout") 
window.clearTimeout id 
If name <> "" Then MsgBox "Hello," & name 
IE.Quit 

'By Demon 
'http://demon.tw 

Sub on_timeout() 
Dim WshShell 
set WshShell = CreateObject("wscript.Shell") 
WshShell.SendKeys "{ESC}" 
End Sub 


用setTimeout方法設定3秒超時,3秒后用SendKeys方法發送ESC鍵結束InputBox。當然,用SendKeys是很不靠譜的,我一般很少用SendKeys方法,因為它做了太多的假設,萬一InputBox不是激活窗口呢?這里只是為了程序簡單而用了SendKeys,可以換成結束腳本本身。 

同理,想在VBS中實現VB中的Timer事件的話可以用setInterval方法,我就不寫例子了,自己看文檔。

參考鏈接:setTimeout Method (window, Window Constructor)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩国产页| 亚洲国产欧美精品| 国语自产精品视频在线看一大j8| 亚洲精品久久久一区二区三区| 在线视频国产日韩| 日韩精品黄色网| 92国产精品久久久久首页| 国产亚洲美女精品久久久| 欧美激情视频一区二区三区不卡| 2019中文字幕在线观看| 精品久久久久久久久久久| 91精品久久久久久久久久| 97欧美精品一区二区三区| 亚洲福利在线看| 伊人伊成久久人综合网站| 日韩av电影手机在线观看| 亚洲一级免费视频| www.精品av.com| 另类图片亚洲另类| 国产女同一区二区| 亚洲天堂男人的天堂| 国产婷婷97碰碰久久人人蜜臀| 日韩电影在线观看免费| 亚洲精品国产精品国自产在线| 狠狠综合久久av一区二区小说| 国产自摸综合网| 国内精品久久久久久中文字幕| 在线观看视频亚洲| 国产精品久久久久久久av电影| 午夜精品一区二区三区在线视| 日韩av成人在线| 成人av在线亚洲| 18一19gay欧美视频网站| 日韩国产欧美区| 久久精品人人爽| 国产精品久久久久久久久久久新郎| 亚洲黄色在线观看| 在线观看欧美视频| 日韩男女性生活视频| 国产欧美精品一区二区| 欧美日韩视频免费播放| 成人a在线视频| 一道本无吗dⅴd在线播放一区| 成人两性免费视频| 欧美韩国理论所午夜片917电影| 国产亚洲视频在线| 福利一区福利二区微拍刺激| 日韩欧美精品网站| 8x海外华人永久免费日韩内陆视频| 欧美电影在线播放| 亚洲国产精品久久| 成人在线播放av| 九九精品在线观看| 亚洲第一精品久久忘忧草社区| 国产日韩精品入口| 91精品久久久久久久久久久久久| 中文字幕亚洲一区在线观看| 成人在线视频网| 欧美国产亚洲精品久久久8v| 日韩欧美高清在线视频| 久久精品成人动漫| 欧美激情一级精品国产| 国产精品久久久久久久久免费看| 久久精品国产2020观看福利| 国产免费一区二区三区在线观看| 亚洲人精品午夜在线观看| 日韩av一卡二卡| 国产免费久久av| 亚洲欧美中文字幕| 亚洲xxx大片| 欧美亚州一区二区三区| 亚洲国产精品yw在线观看| 亚洲美女精品久久| 97碰在线观看| 欧美精品成人在线| 亚洲乱码国产乱码精品精天堂| 亚洲影院在线看| 亚洲人精选亚洲人成在线| 欧美午夜精品在线| 成人福利免费观看| 久久久精品中文字幕| 成人欧美一区二区三区在线湿哒哒| 亚洲人成在线观看| 国产一区玩具在线观看| 久久精品久久久久久| 一区二区日韩精品| 欧美一级免费视频| 欧美人与性动交a欧美精品| 51久久精品夜色国产麻豆| 国产91在线播放九色快色| 欧美视频一区二区三区…| 国产精品国产亚洲伊人久久| 欧美一区二三区| 精品国产一区二区三区久久狼黑人| 国产一区二区三区中文| 国产精品91久久| 国产一区二区三区毛片| 欧美中文在线观看| 欧美激情精品久久久久久久变态| 欧美电影免费在线观看| 69久久夜色精品国产69| 色噜噜狠狠狠综合曰曰曰| 国产精品第100页| 亚洲视频欧洲视频| 热久久免费国产视频| 精品福利在线观看| 欧美一区第一页| 色婷婷av一区二区三区久久| 亚洲欧洲在线免费| 日韩av在线免费播放| 国产97人人超碰caoprom| 国产精品美乳一区二区免费| 午夜免费久久久久| 日韩av成人在线观看| 狠狠干狠狠久久| 成人激情视频小说免费下载| 性欧美暴力猛交69hd| 亚洲欧美色婷婷| 亚洲韩国欧洲国产日产av| 68精品国产免费久久久久久婷婷| 中文字幕亚洲在线| 国产精品丝袜视频| 亚洲电影免费观看高清完整版在线| 国产精品偷伦视频免费观看国产| 国产精品亚洲欧美导航| 久久av在线看| 国产性猛交xxxx免费看久久| 91久久国产婷婷一区二区| 亚洲欧美激情另类校园| 久久久久久免费精品| 欧美成人自拍视频| 欧美大荫蒂xxx| 国产精品自拍网| 亚洲精品短视频| 日韩亚洲一区二区| 欧美国产中文字幕| 欧美黑人一区二区三区| 欧美激情极品视频| 日本精品久久久| 热草久综合在线| 亚洲美女精品成人在线视频| 久久不射热爱视频精品| 91久久精品国产91久久性色| 国产精品视频地址| 亚洲福利视频网站| 国产最新精品视频| 久久久久久国产精品| 91久久久久久久久| 成人午夜一级二级三级| 黑人巨大精品欧美一区二区三区| 午夜精品三级视频福利| 国产乱肥老妇国产一区二| 久久精品亚洲94久久精品| 欧美专区在线观看| 成人免费看片视频| 97碰碰碰免费色视频| 在线观看视频99| 午夜精品视频网站| 国产精品福利观看| 亚洲视频专区在线| 久久99精品久久久久久琪琪| 萌白酱国产一区二区| 久久的精品视频| 色狠狠久久aa北条麻妃|