[转]迅雷组件
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
【导读】本文详细讲解了使用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 Class265
266

267


浙公网安备 33010602011771号