惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
Microsoft Azure Blog
Microsoft Azure Blog
云风的 BLOG
云风的 BLOG
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
L
LangChain Blog
P
Privacy & Cybersecurity Law Blog
Hugging Face - Blog
Hugging Face - Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
大猫的无限游戏
大猫的无限游戏
Cyberwarzone
Cyberwarzone
The Register - Security
The Register - Security
Stack Overflow Blog
Stack Overflow Blog
A
Arctic Wolf
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threatpost
The GitHub Blog
The GitHub Blog
P
Privacy International News Feed
WordPress大学
WordPress大学
U
Unit 42
S
Securelist
T
The Exploit Database - CXSecurity.com
C
Cyber Attacks, Cyber Crime and Cyber Security
P
Proofpoint News Feed
Latest news
Latest news
Hacker News: Ask HN
Hacker News: Ask HN
小众软件
小众软件
Know Your Adversary
Know Your Adversary
The Cloudflare Blog
V
Vulnerabilities – Threatpost
The Hacker News
The Hacker News
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
Security Latest
Security Latest
Google DeepMind News
Google DeepMind News
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Simon Willison's Weblog
Simon Willison's Weblog
博客园 - Franky
Y
Y Combinator Blog
博客园 - 叶小钗
Security Archives - TechRepublic
Security Archives - TechRepublic
Google DeepMind News
Google DeepMind News
N
Netflix TechBlog - Medium
S
Secure Thoughts
T
Threat Research - Cisco Blogs
aimingoo的专栏
aimingoo的专栏
S
SegmentFault 最新的问题
Microsoft Security Blog
Microsoft Security Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
博客园 - 司徒正美
M
MIT News - Artificial intelligence

博客园 - Tiger!

centos 中通过yum安装最新的mono access需要替换日文编码的函数 网上搜集的webbrower的资料,很有借鉴价值 本地计算机可能没有必要的注册信息或消息 DLL 文件来从远程计算机显示消息。 C#常用的文件操作(网上收集) 进行网站建设,您应该想到的(zz) ASP常用的函数模块 Google AdSense 收藏几个有意思的SQL脚本(转载) C#/VB - Automated WebSpider / WebRobot 有人见过这么高的eCPM ? 一切都不象看起来那么严重 — 关于Fraud Clicks Google Adsense宝典: 如何合理地提高Google Adsense的收入 Google Adsense的致命伤 Google Adsense的无效点击 lucene倒排索引原理 DotLucene的一些知识(不完全总结) 基于.NET的开源搜索引擎-DotLucene(2) 基于.NET的开源搜索引擎-DotLucene(1)
转载 VB.NET编程调用迅雷下载文件(1)
Tiger! · 2007-01-25 · via 博客园 - Tiger!

在做抓取的时候,不知道什么原因,无法直接抓到,于是想到调用迅雷下载,这个是网站上找的,没想到还很好用,我只是使用了简单的下载文件功能。

【导读】本文详细讲解了使用VB.NET编程来调用讯雷下载文件的过程和步骤。内容包括:创建讯雷调用对象、使用讯雷调用对象查询下载任务信息、迅雷平台接口函数定义等。

 

首先确保电脑已经安装讯雷,打开VS.NET 点击菜单:项目->添加引用->COM->添加对ThunderAgent 1.0 Type Library的引用。

1.创建讯雷调用对象

Private ThunderEng As New THUNDERAGENTLib.Agent'创建讯雷调用对象

ThunderEng.AddTask("下载地址", "另存文件名", "保存目录","任务注释","引用地址","开始模式", "只从原始地址下载","从原始地址下载线程数") '添加下载任务

ThunderEng.CommitTasks()'提交下载任务

2.使用讯雷调用对象查询下载任务信息

sFileSize = ThunderEng.GetTaskInfo(txtURL.Text, "FileSize")'获取下载文件大小

sDownedSize = ThunderEng.GetTaskInfo(txtURL.Text, "CompletedSize")'获取已完成大小

sFileName = ThunderEng.GetTaskInfo(txtURL.Text, "FileName")'获取文件名

二、迅雷平台接口函数定义

获得信息

1. BSTR GetInfo(BSTR pInfoName)

功能:获得迅雷或平台相关信息

参数:

参数名 含义
pInfoName 信息名称,有如下4种

◆“ThunderExists”:迅雷是否存在

◆“ThunderRunning”:迅雷是否运行

◆“ThunderVersion”:迅雷版本号

◆“PlatformVersion”:平台版本号

返回值:返回值是字符串与参数pInfoName有对应关系

参数 返回值
“ThunderExists” “true”存在,“false”不存在
“ThunderRunning” “true” 运行中, “false”未运行
“ThunderVersion” 迅雷版本号 “x.x.x.x”
“PlatformVersion” 平台版本号 “x.x.x.x”

2. HRESULT GetInfoStruct(INT pInfo)

功能:获取迅雷或平台相关全部信息

参数:

参数名 含义
pInfo 其实是THUNDER_INFO类型的结构指针,调用前把它转换为INT类型;调用后结构中将填充平台信息,定义如下:

typedef struct _THUNDER_INFO

{

BOOL bThunderExists;

BOOL bThunderRunning;

CHAR szThunderVersion[32];

CHAR szPlatformVersion[32];

} THUNDER_INFO;

函数调用后,结构中将填充相应的信息。

返回值:

任务操作

3. 加入任务

HRESULT AddTask

(BSTR pURL,

BSTR pFileName = "",

BSTR pPath = "",

BSTR pComments = "",

BSTR pReferURL = "",

INT nStartMode = -1,

INT nOnlyFromOrigin = 0,

INT nOriginThreadCount = -1);

功能:

往平台加入下载任务信息,此时尚未体现到迅雷中

参数:

参数名 含义
pURL 目标URL,必须参数
pFileName 另存名称,默认为空,表示由迅雷处理,可选参数
pPath 存储目录,默认为空,表示由迅雷处理,可选参数
pComments 下载注释,默认为空,可选参数
pReferURL 引用页URL,默认为空,可选参数
nStartMode 开始模式,0手工开始,1立即开始,默认为-1,表示由迅雷处理,可选参数
nOnlyFromOrigin 是否只从原始URL下载,1只从原始URL下载,0多资源下载,默认为0,可选参数
nOriginThreadCount 原始地址下载线程数,范围1-10,默认为-1,表示由迅雷处理,可选参数

4. 开始任务

HRESULT CommitTaskss()

功能:

把AddTask所加入的下载任务信息真正提交到迅雷中进行下载,并从平台中删除

注意:如果AddTask添加的任务没有被提交没有被取消(调用CancelTasks),则Agent对象析构时会阻塞,所以调用者不应该残留一些没有被提交或者取消的任务,以避免脚本执行者停止响应。

5. 取消任务

HRESULT CancelTasks()

功能:

取消平台中所有由AddTask所加入的下载任务信息

6. 查询任务信息

BSTR GetTaskInfo(BSTR pURL,BSTR pInfoName);

参数:

参数名 含义
pURL 所要查询的下载URL信息
pInfoName 状态名称,有如下几种

◆“Exists”:pURL是否在迅雷的任务列表

◆“Path”:存储目录

◆“FileName”:文件名称

◆“FileSize”:文件大小

◆“CompletedSize”:已下载大小

◆“Percent”:下载进度

◆“Status”:任务状态

返回值: 返回值是字符串与参数pInfoName有对应关系

参数 返回值
“Exists” ”true”存在,”false”不存在
“Path” 存储目录,最后带反斜线\,例:C:\TDDownload\
“FileName” 文件名称
“FileSize” 文件大小,以字节为单位,0表示大小未知
“CompletedSize” 已下载大小,以字节为单位
“Percent” 下载进度,带1位小数,例:70.0
“Status” 任务状态,有以下6种状态

。“running”: 运行状态

。“stopped”: 停止状态

。“failed”: 失败状态

。“success”: 成功状态

。“creatingfile”:正在创建数据文件

。“connecting”: 正在连接

7. GetTaskInfoStruct(INT pTaskInfo)

功能:查询一个任务的所有信息

参数名 含义
pTaskInfo 其实是THUNDER_TASKINFO类型的结构指针,调用前把它转换为INT类型;调用后结构中将填充平台信息,定义如下:

typedef struct _THUNDER_TASKINFO

{

CHAR szURL[1024]; // 任务URL,预先填充

BOOL bTaskExists; // 任务是否存在,TRUE为存在

CHAR szPath[256]; // 下载的本地保存路径

CHAR szFileName[256]; // 本地文件名

ULONGLONG nFileSize; // 文件大小

ULONGLONG nCompletedSize; // 已完成的大小

CHAR szPercent[16]; // 完成的百分数,用 “56.8”的格式

CHAR szStatus[16]; // 当前状态,定义同GetTaskInfo函数

} THUNDER_TASKINFO;

调用者先填充结构中的szURL成员,来指定需要查询的任务的URL,然后等函数返回后就可以从其他成员中取得该任务的信息。

本例所有代码:

            

Imports System

Imports System.Text

Public Class frmThunderClass frmThunder

Private _iStartMode As Integer '讯雷任务下载开始模式

Private ThunderEng As New THUNDERAGENTLib.Agent '创建讯雷调用对象

Private Sub frmThunder_Load()Sub frmThunder_Load(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

Private Sub btnCancel_Click()Sub btnCancel_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles btnCancel.Click

Close()

End Sub

'开始下载任务

Private Sub btnStartDown_Click()Sub btnStartDown_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles btnStartDown.Click

Dim iOnlyFromOrigin, iOriginThreadCount As Integer

iOnlyFromOrigin = IIf(chkOnlyFromOrigin.Checked = True, 1, 0)

iOriginThreadCount = CInt(txtOriginThreadCounts.Text)

If chkDefault.Checked Then

iOriginThreadCount = -1

End If

ThunderEng.AddTask(txtURL.Text, txtSaveAsFileName.Text, txtSaveDir.Text,

txtComment.Text, _ txtReferencePage.Text, _iStartMode, iOnlyFromOrigin,

iOriginThreadCount)

ThunderEng.CommitTasks()

Timer1.Enabled = True

End Sub

Private Sub radMaual_Click()Sub radMaual_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles radMaual.Click, radImmediate.Click,

radDefault.Click

Dim rad As RadioButton = CType(sender, RadioButton)

_iStartMode = CInt(rad.Tag)

End Sub

'当任务开始时定时查询任务下载信息

Private Sub Timer1_Tick()Sub Timer1_Tick(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles Timer1.Tick

Dim sFileSize, sDownedSize, sStatus, sFileName, sPercent As String

Try

sStatus = 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,

sPercent.Remove(3, Len(sPercent) - 3))

Catch ex As Exception

End Try

End Sub

Private Sub chkOnlyFromOrigin_CheckedChanged_1()Sub

chkOnlyFromOrigin_CheckedChanged_1(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles chkOnlyFromOrigin.CheckedChanged

Panel1.Enabled = chkOnlyFromOrigin.Checked

End Sub

Private Sub GroupBox1_Enter()Sub GroupBox1_Enter(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles GroupBox1.Enter

End Sub

End Class