[转]迅雷组件
??1在做抓取的時候,不知道什么原因,無法直接抓到,于是想到調用迅雷下載,這個是網站上找的,沒想到還很好用,我只是使用了簡單的下載文件功能。
??2
??3【導讀】本文詳細講解了使用VB.NET編程來調用訊雷下載文件的過程和步驟。內容包括:創建訊雷調用對象、使用訊雷調用對象查詢下載任務信息、迅雷平臺接口函數定義等。
??4
??5??
??6首先確保電腦已經安裝訊雷,打開VS.NET?點擊菜單:項目->添加引用->COM->添加對ThunderAgent?1.0?Type?Library的引用。
??7
??81.創建訊雷調用對象
??9
?10Private?ThunderEng?As?New?THUNDERAGENTLib.Agent'創建訊雷調用對象
?11
?12
?13
?14ThunderEng.AddTask("下載地址",?"另存文件名",?"保存目錄","任務注釋","引用地址","開始模式",?"只從原始地址下載","從原始地址下載線程數")?'添加下載任務
?15
?16
?17
?18ThunderEng.CommitTasks()'提交下載任務
?19
?20
?21
?222.使用訊雷調用對象查詢下載任務信息
?23
?24sFileSize?=?ThunderEng.GetTaskInfo(txtURL.Text,?"FileSize")'獲取下載文件大小
?25
?26sDownedSize?=?ThunderEng.GetTaskInfo(txtURL.Text,?"CompletedSize")'獲取已完成大小
?27
?28sFileName?=?ThunderEng.GetTaskInfo(txtURL.Text,?"FileName")'獲取文件名
?29
?30二、迅雷平臺接口函數定義?
?31
?32獲得信息?
?33
?341.?BSTR?GetInfo(BSTR?pInfoName)?
?35
?36功能:獲得迅雷或平臺相關信息?
?37
?38參數:?
?39
?40參數名?含義?
?41pInfoName?信息名稱,有如下4種?
?42
?43◆“ThunderExists”:迅雷是否存在?
?44
?45◆“ThunderRunning”:迅雷是否運行?
?46
?47◆“ThunderVersion”:迅雷版本號?
?48
?49◆“PlatformVersion”:平臺版本號??
?50
?51
?52返回值:返回值是字符串與參數pInfoName有對應關系?
?53
?54參數?返回值?
?55“ThunderExists”?“true”存在,“false”不存在?
?56“ThunderRunning”?“true”?運行中,?“false”未運行?
?57“ThunderVersion”?迅雷版本號?“x.x.x.x”?
?58“PlatformVersion”?平臺版本號?“x.x.x.x”?
?59
?60
?612.?HRESULT?GetInfoStruct(INT?pInfo)?
?62
?63功能:獲取迅雷或平臺相關全部信息?
?64
?65參數:?
?66
?67參數名?含義?
?68pInfo?其實是THUNDER_INFO類型的結構指針,調用前把它轉換為INT類型;調用后結構中將填充平臺信息,定義如下:?
?69
?70typedef?struct?_THUNDER_INFO?
?71
?72{?
?73
?74BOOL?bThunderExists;?
?75
?76BOOL?bThunderRunning;?
?77
?78CHAR?szThunderVersion[32];?
?79
?80CHAR?szPlatformVersion[32];?
?81
?82}?THUNDER_INFO;?
?83
?84函數調用后,結構中將填充相應的信息。??
?85
?86
?87返回值:?
?88
?890?獲取成功?
?90非0?獲取失敗?
?91
?92
?93任務操作?
?94
?953.?加入任務?
?96
?97HRESULT?AddTask?
?98
?99(BSTR?pURL,?
100
101BSTR?pFileName?=?"",?
102
103BSTR?pPath?=?"",?
104
105BSTR?pComments?=?"",?
106
107BSTR?pReferURL?=?"",?
108
109INT?nStartMode?=?-1,?
110
111INT?nOnlyFromOrigin?=?0,?
112
113INT?nOriginThreadCount?=?-1);?
114
115功能:?
116
117往平臺加入下載任務信息,此時尚未體現到迅雷中?
118
119參數:?
120
121
122
123參數名?含義?
124pURL?目標URL,必須參數?
125pFileName?另存名稱,默認為空,表示由迅雷處理,可選參數?
126pPath?存儲目錄,默認為空,表示由迅雷處理,可選參數?
127pComments?下載注釋,默認為空,可選參數?
128pReferURL?引用頁URL,默認為空,可選參數?
129nStartMode?開始模式,0手工開始,1立即開始,默認為-1,表示由迅雷處理,可選參數?
130nOnlyFromOrigin?是否只從原始URL下載,1只從原始URL下載,0多資源下載,默認為0,可選參數?
131nOriginThreadCount?原始地址下載線程數,范圍1-10,默認為-1,表示由迅雷處理,可選參數?
132
133
134
135?
136
137?
138
1394.?開始任務?
140
141
142
143HRESULT?CommitTaskss()?
144
145功能:?
146
147把AddTask所加入的下載任務信息真正提交到迅雷中進行下載,并從平臺中刪除?
148
149注意:如果AddTask添加的任務沒有被提交沒有被取消(調用CancelTasks),則Agent對象析構時會阻塞,所以調用者不應該殘留一些沒有被提交或者取消的任務,以避免腳本執行者停止響應。?
150
1515.?取消任務?
152
153HRESULT?CancelTasks()?
154
155功能:?
156
157取消平臺中所有由AddTask所加入的下載任務信息?
158
1596.?查詢任務信息?
160
161BSTR?GetTaskInfo(BSTR?pURL,BSTR?pInfoName);?
162
163參數:?
164
165
166
167參數名?含義?
168pURL?所要查詢的下載URL信息?
169pInfoName?狀態名稱,有如下幾種?
170
171◆“Exists”:pURL是否在迅雷的任務列表?
172
173◆“Path”:存儲目錄?
174
175◆“FileName”:文件名稱?
176
177◆“FileSize”:文件大小?
178
179◆“CompletedSize”:已下載大小?
180
181◆“Percent”:下載進度?
182
183◆“Status”:任務狀態??
184
185
186
187
188返回值:?返回值是字符串與參數pInfoName有對應關系?
189
190
191
192參數?返回值?
193“Exists”?”true”存在,”false”不存在?
194“Path”?存儲目錄,最后帶反斜線\,例:C:\TDDownload\?
195“FileName”?文件名稱?
196“FileSize”?文件大小,以字節為單位,0表示大小未知?
197“CompletedSize”?已下載大小,以字節為單位?
198“Percent”?下載進度,帶1位小數,例:70.0?
199“Status”?任務狀態,有以下6種狀態?
200
201?!皉unning”:?運行狀態?
202
203?!皊topped”:?停止狀態?
204
205?!癴ailed”:?失敗狀態?
206
207。“success”:?成功狀態?
208
209?!癱reatingfile”:正在創建數據文件?
210
211?!癱onnecting”:?正在連接??
212
213
214
215
2167.?GetTaskInfoStruct(INT?pTaskInfo)?
217
218功能:查詢一個任務的所有信息?
219
220
221
222參數名?含義?
223pTaskInfo?其實是THUNDER_TASKINFO類型的結構指針,調用前把它轉換為INT類型;調用后結構中將填充平臺信息,定義如下:?
224
225typedef?struct?_THUNDER_TASKINFO?
226
227{?
228
229CHAR?szURL[1024];?//?任務URL,預先填充?
230
231BOOL?bTaskExists;?//?任務是否存在,TRUE為存在?
232
233CHAR?szPath[256];?//?下載的本地保存路徑?
234
235CHAR?szFileName[256];?//?本地文件名?
236
237ULONGLONG?nFileSize;?//?文件大小?
238
239ULONGLONG?nCompletedSize;?//?已完成的大小?
240
241CHAR?szPercent[16];?//?完成的百分數,用?“56.8”的格式?
242
243CHAR?szStatus[16];?//?當前狀態,定義同GetTaskInfo函數?
244
245}?THUNDER_TASKINFO;?
246
247調用者先填充結構中的szURL成員,來指定需要查詢的任務的URL,然后等函數返回后就可以從其他成員中取得該任務的信息。??
248
249
250本例所有代碼:
251
252????????????Imports?SystemImports?System.TextPublic?Class?frmThunderClassClass?frmThunderClass?frmThunderPrivate?_iStartMode?As?Integer?'訊雷任務下載開始模式Private?ThunderEng?As?New?THUNDERAGENTLib.Agent?'創建訊雷調用對象Private?Sub?frmThunder_Load()Sub?frmThunder_Load(ByVal?sender?As?System.Object,?
253????????????ByVal?e?As?System.EventArgs)?Handles?MyBase.LoadEnd?SubPrivate?Sub?btnCancel_Click()Sub?btnCancel_Click()Sub?btnCancel_Click()Sub?btnCancel_Click(ByVal?sender?As?System.Object,?
254????????????ByVal?e?As?System.EventArgs)?Handles?btnCancel.ClickClose()End?Sub'開始下載任務Private?Sub?btnStartDown_Click()Sub?btnStartDown_Click(ByVal?sender?As?System.Object,?
255????????????ByVal?e?As?System.EventArgs)?Handles?btnStartDown.ClickDim?iOnlyFromOrigin,?iOriginThreadCount?As?IntegeriOnlyFromOrigin?=?IIf(chkOnlyFromOrigin.Checked?=?True,?1,?0)iOriginThreadCount?=?CInt(txtOriginThreadCounts.Text)If?chkDefault.Checked?TheniOriginThreadCount?=?-1End?IfThunderEng.AddTask(txtURL.Text,?txtSaveAsFileName.Text,?txtSaveDir.Text,?
256????????????txtComment.Text,?_?txtReferencePage.Text,?_iStartMode,?iOnlyFromOrigin,?
257????????????iOriginThreadCount)ThunderEng.CommitTasks()Timer1.Enabled?=?TrueEnd?SubPrivate?Sub?radMaual_Click()Sub?radMaual_Click()Sub?radMaual_Click()Sub?radMaual_Click(ByVal?sender?As?System.Object,?
258????????????ByVal?e?As?System.EventArgs)?Handles?radMaual.Click,?radImmediate.Click,?
259????????????radDefault.ClickDim?rad?As?RadioButton?=?CType(sender,?RadioButton)_iStartMode?=?CInt(rad.Tag)End?Sub'當任務開始時定時查詢任務下載信息Private?Sub?Timer1_Tick()Sub?Timer1_Tick(ByVal?sender?As?System.Object,?
260????????????ByVal?e?As?System.EventArgs)?Handles?Timer1.TickDim?sFileSize,?sDownedSize,?sStatus,?sFileName,?sPercent?As?StringTrysStatus?=?ThunderEng.GetTaskInfo(txtURL.Text,?"Status")sFileSize?=?ThunderEng.GetTaskInfo(txtURL.Text,?"FileSize")sDownedSize?=?ThunderEng.GetTaskInfo(txtURL.Text,?"CompletedSize")sFileName?=?ThunderEng.GetTaskInfo(txtURL.Text,?"FileName")lblDownedSize.Text?=?String.Format(lblDownedSize.Tag,?sDownedSize)lblFileSize.Text?=?String.Format(lblFileSize.Tag,?sFileSize)lblTaskStatus.Text?=?String.Format(lblTaskStatus.Tag,?sStatus)lblFilename.Text?=?String.Format(lblFilename.Tag,?sFileName)sPercent?=?ThunderEng.GetTaskInfo(txtURL.Text,?"Percent")?'獲取下載百分比lblProgress.Text?=?String.Format(lblProgress.Tag,?
261????????????sPercent.Remove(3,?Len(sPercent)?-?3))Catch?ex?As?ExceptionEnd?TryEnd?SubPrivate?Sub?chkOnlyFromOrigin_CheckedChanged_1()Sub?chkOnlyFromOrigin_CheckedChanged_1()Sub?chkOnlyFromOrigin_CheckedChanged_1()Sub?
262????????????chkOnlyFromOrigin_CheckedChanged_1(ByVal?sender?As?System.Object,?
263????????????ByVal?e?As?System.EventArgs)?Handles?chkOnlyFromOrigin.CheckedChangedPanel1.Enabled?=?chkOnlyFromOrigin.CheckedEnd?SubPrivate?Sub?GroupBox1_Enter()Sub?GroupBox1_Enter()Sub?GroupBox1_Enter()Sub?GroupBox1_Enter(ByVal?sender?As?System.Object,?
264????????????ByVal?e?As?System.EventArgs)?Handles?GroupBox1.EnterEnd?SubEnd?Class?Class
265?
266
267
??2
??3【導讀】本文詳細講解了使用VB.NET編程來調用訊雷下載文件的過程和步驟。內容包括:創建訊雷調用對象、使用訊雷調用對象查詢下載任務信息、迅雷平臺接口函數定義等。
??4
??5??
??6首先確保電腦已經安裝訊雷,打開VS.NET?點擊菜單:項目->添加引用->COM->添加對ThunderAgent?1.0?Type?Library的引用。
??7
??81.創建訊雷調用對象
??9
?10Private?ThunderEng?As?New?THUNDERAGENTLib.Agent'創建訊雷調用對象
?11
?12
?13
?14ThunderEng.AddTask("下載地址",?"另存文件名",?"保存目錄","任務注釋","引用地址","開始模式",?"只從原始地址下載","從原始地址下載線程數")?'添加下載任務
?15
?16
?17
?18ThunderEng.CommitTasks()'提交下載任務
?19
?20
?21
?222.使用訊雷調用對象查詢下載任務信息
?23
?24sFileSize?=?ThunderEng.GetTaskInfo(txtURL.Text,?"FileSize")'獲取下載文件大小
?25
?26sDownedSize?=?ThunderEng.GetTaskInfo(txtURL.Text,?"CompletedSize")'獲取已完成大小
?27
?28sFileName?=?ThunderEng.GetTaskInfo(txtURL.Text,?"FileName")'獲取文件名
?29
?30二、迅雷平臺接口函數定義?
?31
?32獲得信息?
?33
?341.?BSTR?GetInfo(BSTR?pInfoName)?
?35
?36功能:獲得迅雷或平臺相關信息?
?37
?38參數:?
?39
?40參數名?含義?
?41pInfoName?信息名稱,有如下4種?
?42
?43◆“ThunderExists”:迅雷是否存在?
?44
?45◆“ThunderRunning”:迅雷是否運行?
?46
?47◆“ThunderVersion”:迅雷版本號?
?48
?49◆“PlatformVersion”:平臺版本號??
?50
?51
?52返回值:返回值是字符串與參數pInfoName有對應關系?
?53
?54參數?返回值?
?55“ThunderExists”?“true”存在,“false”不存在?
?56“ThunderRunning”?“true”?運行中,?“false”未運行?
?57“ThunderVersion”?迅雷版本號?“x.x.x.x”?
?58“PlatformVersion”?平臺版本號?“x.x.x.x”?
?59
?60
?612.?HRESULT?GetInfoStruct(INT?pInfo)?
?62
?63功能:獲取迅雷或平臺相關全部信息?
?64
?65參數:?
?66
?67參數名?含義?
?68pInfo?其實是THUNDER_INFO類型的結構指針,調用前把它轉換為INT類型;調用后結構中將填充平臺信息,定義如下:?
?69
?70typedef?struct?_THUNDER_INFO?
?71
?72{?
?73
?74BOOL?bThunderExists;?
?75
?76BOOL?bThunderRunning;?
?77
?78CHAR?szThunderVersion[32];?
?79
?80CHAR?szPlatformVersion[32];?
?81
?82}?THUNDER_INFO;?
?83
?84函數調用后,結構中將填充相應的信息。??
?85
?86
?87返回值:?
?88
?890?獲取成功?
?90非0?獲取失敗?
?91
?92
?93任務操作?
?94
?953.?加入任務?
?96
?97HRESULT?AddTask?
?98
?99(BSTR?pURL,?
100
101BSTR?pFileName?=?"",?
102
103BSTR?pPath?=?"",?
104
105BSTR?pComments?=?"",?
106
107BSTR?pReferURL?=?"",?
108
109INT?nStartMode?=?-1,?
110
111INT?nOnlyFromOrigin?=?0,?
112
113INT?nOriginThreadCount?=?-1);?
114
115功能:?
116
117往平臺加入下載任務信息,此時尚未體現到迅雷中?
118
119參數:?
120
121
122
123參數名?含義?
124pURL?目標URL,必須參數?
125pFileName?另存名稱,默認為空,表示由迅雷處理,可選參數?
126pPath?存儲目錄,默認為空,表示由迅雷處理,可選參數?
127pComments?下載注釋,默認為空,可選參數?
128pReferURL?引用頁URL,默認為空,可選參數?
129nStartMode?開始模式,0手工開始,1立即開始,默認為-1,表示由迅雷處理,可選參數?
130nOnlyFromOrigin?是否只從原始URL下載,1只從原始URL下載,0多資源下載,默認為0,可選參數?
131nOriginThreadCount?原始地址下載線程數,范圍1-10,默認為-1,表示由迅雷處理,可選參數?
132
133
134
135?
136
137?
138
1394.?開始任務?
140
141
142
143HRESULT?CommitTaskss()?
144
145功能:?
146
147把AddTask所加入的下載任務信息真正提交到迅雷中進行下載,并從平臺中刪除?
148
149注意:如果AddTask添加的任務沒有被提交沒有被取消(調用CancelTasks),則Agent對象析構時會阻塞,所以調用者不應該殘留一些沒有被提交或者取消的任務,以避免腳本執行者停止響應。?
150
1515.?取消任務?
152
153HRESULT?CancelTasks()?
154
155功能:?
156
157取消平臺中所有由AddTask所加入的下載任務信息?
158
1596.?查詢任務信息?
160
161BSTR?GetTaskInfo(BSTR?pURL,BSTR?pInfoName);?
162
163參數:?
164
165
166
167參數名?含義?
168pURL?所要查詢的下載URL信息?
169pInfoName?狀態名稱,有如下幾種?
170
171◆“Exists”:pURL是否在迅雷的任務列表?
172
173◆“Path”:存儲目錄?
174
175◆“FileName”:文件名稱?
176
177◆“FileSize”:文件大小?
178
179◆“CompletedSize”:已下載大小?
180
181◆“Percent”:下載進度?
182
183◆“Status”:任務狀態??
184
185
186
187
188返回值:?返回值是字符串與參數pInfoName有對應關系?
189
190
191
192參數?返回值?
193“Exists”?”true”存在,”false”不存在?
194“Path”?存儲目錄,最后帶反斜線\,例:C:\TDDownload\?
195“FileName”?文件名稱?
196“FileSize”?文件大小,以字節為單位,0表示大小未知?
197“CompletedSize”?已下載大小,以字節為單位?
198“Percent”?下載進度,帶1位小數,例:70.0?
199“Status”?任務狀態,有以下6種狀態?
200
201?!皉unning”:?運行狀態?
202
203?!皊topped”:?停止狀態?
204
205?!癴ailed”:?失敗狀態?
206
207。“success”:?成功狀態?
208
209?!癱reatingfile”:正在創建數據文件?
210
211?!癱onnecting”:?正在連接??
212
213
214
215
2167.?GetTaskInfoStruct(INT?pTaskInfo)?
217
218功能:查詢一個任務的所有信息?
219
220
221
222參數名?含義?
223pTaskInfo?其實是THUNDER_TASKINFO類型的結構指針,調用前把它轉換為INT類型;調用后結構中將填充平臺信息,定義如下:?
224
225typedef?struct?_THUNDER_TASKINFO?
226
227{?
228
229CHAR?szURL[1024];?//?任務URL,預先填充?
230
231BOOL?bTaskExists;?//?任務是否存在,TRUE為存在?
232
233CHAR?szPath[256];?//?下載的本地保存路徑?
234
235CHAR?szFileName[256];?//?本地文件名?
236
237ULONGLONG?nFileSize;?//?文件大小?
238
239ULONGLONG?nCompletedSize;?//?已完成的大小?
240
241CHAR?szPercent[16];?//?完成的百分數,用?“56.8”的格式?
242
243CHAR?szStatus[16];?//?當前狀態,定義同GetTaskInfo函數?
244
245}?THUNDER_TASKINFO;?
246
247調用者先填充結構中的szURL成員,來指定需要查詢的任務的URL,然后等函數返回后就可以從其他成員中取得該任務的信息。??
248
249
250本例所有代碼:
251
252????????????Imports?SystemImports?System.TextPublic?Class?frmThunderClassClass?frmThunderClass?frmThunderPrivate?_iStartMode?As?Integer?'訊雷任務下載開始模式Private?ThunderEng?As?New?THUNDERAGENTLib.Agent?'創建訊雷調用對象Private?Sub?frmThunder_Load()Sub?frmThunder_Load(ByVal?sender?As?System.Object,?
253????????????ByVal?e?As?System.EventArgs)?Handles?MyBase.LoadEnd?SubPrivate?Sub?btnCancel_Click()Sub?btnCancel_Click()Sub?btnCancel_Click()Sub?btnCancel_Click(ByVal?sender?As?System.Object,?
254????????????ByVal?e?As?System.EventArgs)?Handles?btnCancel.ClickClose()End?Sub'開始下載任務Private?Sub?btnStartDown_Click()Sub?btnStartDown_Click(ByVal?sender?As?System.Object,?
255????????????ByVal?e?As?System.EventArgs)?Handles?btnStartDown.ClickDim?iOnlyFromOrigin,?iOriginThreadCount?As?IntegeriOnlyFromOrigin?=?IIf(chkOnlyFromOrigin.Checked?=?True,?1,?0)iOriginThreadCount?=?CInt(txtOriginThreadCounts.Text)If?chkDefault.Checked?TheniOriginThreadCount?=?-1End?IfThunderEng.AddTask(txtURL.Text,?txtSaveAsFileName.Text,?txtSaveDir.Text,?
256????????????txtComment.Text,?_?txtReferencePage.Text,?_iStartMode,?iOnlyFromOrigin,?
257????????????iOriginThreadCount)ThunderEng.CommitTasks()Timer1.Enabled?=?TrueEnd?SubPrivate?Sub?radMaual_Click()Sub?radMaual_Click()Sub?radMaual_Click()Sub?radMaual_Click(ByVal?sender?As?System.Object,?
258????????????ByVal?e?As?System.EventArgs)?Handles?radMaual.Click,?radImmediate.Click,?
259????????????radDefault.ClickDim?rad?As?RadioButton?=?CType(sender,?RadioButton)_iStartMode?=?CInt(rad.Tag)End?Sub'當任務開始時定時查詢任務下載信息Private?Sub?Timer1_Tick()Sub?Timer1_Tick(ByVal?sender?As?System.Object,?
260????????????ByVal?e?As?System.EventArgs)?Handles?Timer1.TickDim?sFileSize,?sDownedSize,?sStatus,?sFileName,?sPercent?As?StringTrysStatus?=?ThunderEng.GetTaskInfo(txtURL.Text,?"Status")sFileSize?=?ThunderEng.GetTaskInfo(txtURL.Text,?"FileSize")sDownedSize?=?ThunderEng.GetTaskInfo(txtURL.Text,?"CompletedSize")sFileName?=?ThunderEng.GetTaskInfo(txtURL.Text,?"FileName")lblDownedSize.Text?=?String.Format(lblDownedSize.Tag,?sDownedSize)lblFileSize.Text?=?String.Format(lblFileSize.Tag,?sFileSize)lblTaskStatus.Text?=?String.Format(lblTaskStatus.Tag,?sStatus)lblFilename.Text?=?String.Format(lblFilename.Tag,?sFileName)sPercent?=?ThunderEng.GetTaskInfo(txtURL.Text,?"Percent")?'獲取下載百分比lblProgress.Text?=?String.Format(lblProgress.Tag,?
261????????????sPercent.Remove(3,?Len(sPercent)?-?3))Catch?ex?As?ExceptionEnd?TryEnd?SubPrivate?Sub?chkOnlyFromOrigin_CheckedChanged_1()Sub?chkOnlyFromOrigin_CheckedChanged_1()Sub?chkOnlyFromOrigin_CheckedChanged_1()Sub?
262????????????chkOnlyFromOrigin_CheckedChanged_1(ByVal?sender?As?System.Object,?
263????????????ByVal?e?As?System.EventArgs)?Handles?chkOnlyFromOrigin.CheckedChangedPanel1.Enabled?=?chkOnlyFromOrigin.CheckedEnd?SubPrivate?Sub?GroupBox1_Enter()Sub?GroupBox1_Enter()Sub?GroupBox1_Enter()Sub?GroupBox1_Enter(ByVal?sender?As?System.Object,?
264????????????ByVal?e?As?System.EventArgs)?Handles?GroupBox1.EnterEnd?SubEnd?Class?Class
265?
266
267
轉載于:https://www.cnblogs.com/wubiyu/archive/2007/09/19/899152.html
總結
- 上一篇: [博客之路]如何增加一个博客的PR值(一
- 下一篇: 永远成长的苹果树