1
在做抓取的时候,不知道什么原因,无法直接抓到,于是想到调用迅雷下载,这个是网站上找的,没想到还很好用,我只是使用了简单的下载文件功能。
2
3
【导读】本文详细讲解了使用VB.NET编程来调用讯雷下载文件的过程和步骤。内容包括:创建讯雷调用对象、使用讯雷调用对象查询下载任务信息、迅雷平台接口函数定义等。
4
5
6
首先确保电脑已经安装讯雷,打开VS.NET 点击菜单:项目->添加引用->COM->添加对ThunderAgent 1.0 Type Library的引用。
7
8
1.创建讯雷调用对象
9
10
Private ThunderEng As New THUNDERAGENTLib.Agent'创建讯雷调用对象
11
12
13
14
ThunderEng.AddTask("下载地址", "另存文件名", "保存目录","任务注释","引用地址","开始模式", "只从原始地址下载","从原始地址下载线程数") '添加下载任务
15
16
17
18
ThunderEng.CommitTasks()'提交下载任务
19
20
21
22
2.使用讯雷调用对象查询下载任务信息
23
24
sFileSize = ThunderEng.GetTaskInfo(txtURL.Text, "FileSize")'获取下载文件大小
25
26
sDownedSize = ThunderEng.GetTaskInfo(txtURL.Text, "CompletedSize")'获取已完成大小
27
28
sFileName = ThunderEng.GetTaskInfo(txtURL.Text, "FileName")'获取文件名
29
30
二、迅雷平台接口函数定义
31
32
获得信息
33
34
1. BSTR GetInfo(BSTR pInfoName)
35
36
功能:获得迅雷或平台相关信息
37
38
参数:
39
40
参数名 含义
41
pInfoName 信息名称,有如下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
61
2. HRESULT GetInfoStruct(INT pInfo)
62
63
功能:获取迅雷或平台相关全部信息
64
65
参数:
66
67
参数名 含义
68
pInfo 其实是THUNDER_INFO类型的结构指针,调用前把它转换为INT类型;调用后结构中将填充平台信息,定义如下:
69
70
typedef struct _THUNDER_INFO
71
72
{
73
74
BOOL bThunderExists;
75
76
BOOL bThunderRunning;
77
78
CHAR szThunderVersion[32];
79
80
CHAR szPlatformVersion[32];
81
82
} THUNDER_INFO;
83
84
函数调用后,结构中将填充相应的信息。
85
86
87
返回值:
88
89
0 获取成功
90
非0 获取失败
91
92
93
任务操作
94
95
3. 加入任务
96
97
HRESULT AddTask
98
99
(BSTR pURL,
100
101
BSTR pFileName = "",
102
103
BSTR pPath = "",
104
105
BSTR pComments = "",
106
107
BSTR pReferURL = "",
108
109
INT nStartMode = -1,
110
111
INT nOnlyFromOrigin = 0,
112
113
INT nOriginThreadCount = -1);
114
115
功能:
116
117
往平台加入下载任务信息,此时尚未体现到迅雷中
118
119
参数:
120
121
122
123
参数名 含义
124
pURL 目标URL,必须参数
125
pFileName 另存名称,默认为空,表示由迅雷处理,可选参数
126
pPath 存储目录,默认为空,表示由迅雷处理,可选参数
127
pComments 下载注释,默认为空,可选参数
128
pReferURL 引用页URL,默认为空,可选参数
129
nStartMode 开始模式,0手工开始,1立即开始,默认为-1,表示由迅雷处理,可选参数
130
nOnlyFromOrigin 是否只从原始URL下载,1只从原始URL下载,0多资源下载,默认为0,可选参数
131
nOriginThreadCount 原始地址下载线程数,范围1-10,默认为-1,表示由迅雷处理,可选参数
132
133
134
135
136
137
138
139
4. 开始任务
140
141
142
143
HRESULT CommitTaskss()
144
145
功能:
146
147
把AddTask所加入的下载任务信息真正提交到迅雷中进行下载,并从平台中删除
148
149
注意:如果AddTask添加的任务没有被提交没有被取消(调用CancelTasks),则Agent对象析构时会阻塞,所以调用者不应该残留一些没有被提交或者取消的任务,以避免脚本执行者停止响应。
150
151
5. 取消任务
152
153
HRESULT CancelTasks()
154
155
功能:
156
157
取消平台中所有由AddTask所加入的下载任务信息
158
159
6. 查询任务信息
160
161
BSTR GetTaskInfo(BSTR pURL,BSTR pInfoName);
162
163
参数:
164
165
166
167
参数名 含义
168
pURL 所要查询的下载URL信息
169
pInfoName 状态名称,有如下几种
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
。“running”: 运行状态
202
203
。“stopped”: 停止状态
204
205
。“failed”: 失败状态
206
207
。“success”: 成功状态
208
209
。“creatingfile”:正在创建数据文件
210
211
。“connecting”: 正在连接
212
213
214
215
216
7. GetTaskInfoStruct(INT pTaskInfo)
217
218
功能:查询一个任务的所有信息
219
220
221
222
参数名 含义
223
pTaskInfo 其实是THUNDER_TASKINFO类型的结构指针,调用前把它转换为INT类型;调用后结构中将填充平台信息,定义如下:
224
225
typedef struct _THUNDER_TASKINFO
226
227
{
228
229
CHAR szURL[1024]; // 任务URL,预先填充
230
231
BOOL bTaskExists; // 任务是否存在,TRUE为存在
232
233
CHAR szPath[256]; // 下载的本地保存路径
234
235
CHAR szFileName[256]; // 本地文件名
236
237
ULONGLONG nFileSize; // 文件大小
238
239
ULONGLONG nCompletedSize; // 已完成的大小
240
241
CHAR szPercent[16]; // 完成的百分数,用 “56.8”的格式
242
243
CHAR szStatus[16]; // 当前状态,定义同GetTaskInfo函数
244
245
} THUNDER_TASKINFO;
246
247
调用者先填充结构中的szURL成员,来指定需要查询的任务的URL,然后等函数返回后就可以从其他成员中取得该任务的信息。
248
249
250
本例所有代码:
251
252
Imports SystemImports System.TextPublic Class 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(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(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
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(ByVal sender As System.Object,
264
ByVal e As System.EventArgs) Handles GroupBox1.EnterEnd SubEnd Class
265
266
267

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267
