迅雷应用开发

简介: 360上市了,同时周鸿祎也暗示自己投资的另一家公司也要上市,业界都在猜测是否是迅雷。但是又有传闻说美国会拿迅雷上市开刀,以知识产权来影响中国互联网企业上市的门槛。 最近迅雷也开放了自己的下载引擎,使得用户不需要安装迅雷,也可以使用迅雷引擎来进行下载。

360上市了,同时周鸿祎也暗示自己投资的另一家公司也要上市,业界都在猜测是否是迅雷。但是又有传闻说美国会拿迅雷上市开刀,以知识产权来影响中国互联网企业上市的门槛。


最近迅雷也开放了自己的下载引擎,使得用户不需要安装迅雷,也可以使用迅雷引擎来进行下载。围绕着迅雷做开发,利用迅雷下载的资源优势,和逐渐壮大的迅雷雷友社区来创造增值,应该是迅雷开放自己下载引擎的目的。围绕迅雷做开发大体上有三种:


1. 使用迅雷的开放引擎XLDownload.dll做开发。
2. 使用迅雷的ThunderAgent.dll, COM组件做Agent开发。
3. 使用Lua在迅雷内部做应用插件开发。
Reference:
http://thunderplatform.xunlei.com/
http://xldoc.xl7.xunlei.com/
 

1. 使用迅雷的开放引擎XLDownload.dll做开发
在XLDownload.dll的 .h 头文件里给出了XLDownload.dll提供的功能:

BOOL __stdcall XLInitDownloadEngine();
DWORD __stdcall XLURLDownloadToFile(LPCTSTR pszFileName, LPCTSTR pszUrl, LPCTSTR pszRefUrl, LONG & lTaskId);
DWORD __stdcall XLQueryTaskInfo(LONG lTaskId, LONG *plStatus, ULONGLONG *pullFileSize, ULONGLONG *pullRecvSize);
DWORD __stdcall XLPauseTask(LONG lTaskId, LONG & lNewTaskId);
DWORD __stdcall XLContinueTask(LONG lTaskId);
DWORD __stdcall XLContinueTaskFromTdFile(LPCTSTR pszTdFileFullPath, LONG & lTaskId);
VOID __stdcall XLStopTask(LONG lTaskId);
BOOL __stdcall XLUninitDownloadEngine();
DWORD __stdcall XLGetErrorMsg(DWORD dwErrorId, LPTSTR pszBuffer, DWORD & dwSize);
enum enumTaskStatus{
  enumTaskStatus_Connect = 0, // 已经建立连接
  enumTaskStatus_Download = 2, // 开始下载 
  enumTaskStatus_Pause = 10, // 暂停
  enumTaskStatus_Success = 11, // 成功下载
  enumTaskStatus_Fail = 12, // 下载失败
};

根据这9个函数,可以使用.Net DllImport 一下,开发出一个基于迅雷引擎的下载工具:

1

迅雷的开放引擎在被调用时,会在系统托盘里弹出提示信息,告诉用户正在使用迅雷开放引擎下载:

2

这个版本的开放下载引擎稍有遗憾,好像只支持Http协议的资源,迅雷本协议的资源并不支持下载。这个让人很是遗憾。


2. 使用迅雷的ThunderAgent.dll, COM组件做Agent开发
安装完迅雷后,在迅雷的BHO文件夹下会找到ThunderAgent.dll,.Net 工程加载这个dll后,会看到Agent内部的API :

3

使用Agent开发迅雷应用,迅雷必须安装,调用AddTask后会弹出迅雷的提示框:

4

需要用户自己点击"立即下载"。可以使用FindWindow, SendMessage, 类似自动测试常用的办法点击"立即下载"。


3. 使用Lua在迅雷内部做应用插件开发
Lua 作为内嵌语言来做插件开发已经非常成熟了,最为著名的应该算暴雪的《魔兽世界》和其它各大游戏厂商都在使用Lua作为自己游戏的插件开发语言。迅雷也选用Lua作为自己的插件开发语言。使用Lua可以快速方便的开发出一个迅雷应用插件:

5

这个 Blog&Music 迅雷插件想在迅雷里一边看博客,一边听音乐。点击插件,会新开一个Tab页载入博客:

6

同时在下载状态栏里载入一个音乐播放器:

7

这样就可以在迅雷里一边看博客,一边听音乐了。 :)


安装插件时,把BlogMusic文件夹拷贝到 ProgramData\Thunder Network\addins\ 下,同时删除addins_cache.xml,清除插件的cache,重新打开迅雷就可以看到这个插件了。

这个插件没有什么实际意义,只是学习迅雷插件的开发。
迅雷在线文档给出了Lua可调用的API:   http://xldoc.xl7.xunlei.com/
迅雷阳台里有一些实用插件:       http://yangtai.xunlei.com/

上面大体是围绕迅雷做开发的三种方式,从这三种方式看,感觉迅雷的开放力度很小,迅雷的开放引擎不支持自己的协议,同时要在系统托盘提示用户在使用迅雷引擎。Lua可访问的API也并不多,而且还主要集中在UI上,看来迅雷对开放还是比较保守的。

示例代码

相关文章
|
存储 人工智能 Cloud Native
阿里云推出中小企业扶持权益,助力企业开启智能时代创业新范式
在当今快速发展的数字时代,中小企业面临着无限的商业机遇和挑战。为了帮助中小企业更好地应对这些挑战,抓住发展机遇,阿里云近日推出了全新的中小企业扶持权益,为企业提供了一站式的数字化解决方案,让企业轻松开启智能时代创业新范式。
阿里云推出中小企业扶持权益,助力企业开启智能时代创业新范式
|
数据采集 安全
主动扫描和被动扫描
在扫描器中输入目标域名或者URL用爬虫模块爬取所有链接,对GET、POST等请求进行参数变形和污染,进行重放测试,然后依据返回信息中的状态码、数据大小、数据内容关键字等去判断该请求是否含有相应的漏洞。
1096 0
主动扫描和被动扫描
|
7月前
|
存储 安全 Linux
【实战指南】7个设置/获取接口了解Linux时间管理
本文系统介绍了Linux时间管理中的7个关键设置/获取接口,涵盖时间获取(如`time`、`gettimeofday`、`clock_gettime`)、时间设置(如`stime`、`settimeofday`、`clock_settime`)以及时间转换和格式化等内容。文章详细解析了绝对时间和相对时间的概念,包括GMT、UTC及本地时间的区别,并通过实例测试展示了各接口的使用方法与特性。此外,还探讨了时区设置对时间计算的影响,强调在实际开发中推荐使用UTC作为基准时间以避免时区变化带来的问题。总结部分结合项目经验,提醒开发者注意时间服务的重要性及潜在风险,例如时间跳跃可能引发的应用故障。
310 115
【实战指南】7个设置/获取接口了解Linux时间管理
|
监控 网络协议 Linux
使用Docker部署监控服务Uptime Kuma并实现无公网ip远程访问本地服务
使用Docker部署监控服务Uptime Kuma并实现无公网ip远程访问本地服务
539 0
|
8月前
|
人工智能 Java 程序员
通义灵码深度评测:AI程序员是效率革命,还是昙花一现?
在AI编程浪潮中,阿里云推出的通义灵码以“全栈AI程序员”定位强势入局。通过两周深度体验,这款基于通义大模型的工具展现了从代码补全到工程架构、跨语言开发、单元测试及错误排查的强大功能。它不仅大幅提升了开发效率,如节省60%以上的脚手架搭建时间,还在多文件协同和架构感知方面表现出色。尽管在复杂业务逻辑和框架特性理解上仍有提升空间,通义灵码已展现出颠覆性价值,使开发者能聚焦核心业务创新。
|
人工智能 自然语言处理 NoSQL
Transformers 4.37 中文文档(四十九)(1)
Transformers 4.37 中文文档(四十九)
214 2
|
搜索推荐 Java 关系型数据库
基于SpringBoot+Vue家乡特色推荐系统
基于SpringBoot+Vue家乡特色推荐系统
194 0
基于SpringBoot+Vue家乡特色推荐系统
|
缓存 Linux Go
Golang交叉编译(跨平台编译)的使用
存在交叉编译的情况时,cgo 工具是不可用的。在标准 go 命令的上下文环境中,交叉编译意味着程序构建环境的目标计算架构的标识与程序运行环境的目标计算架构的标识不同,或者程序构建环境的目标操作系统的标识与程序运行环境的目标操作系统的标识不同
552 0
Golang交叉编译(跨平台编译)的使用