最近有个项目需要用winform调用迅雷下载。上网百度后发现迅雷自带的com组件从迅雷5之后就废掉了,除了能添加任务,其余功能全不能用。后来又发现了迅雷下载开放引擎这么个东西 http://thunderplatform.xunlei.com/ ,虽然只支持HTTP协议,但比thunderagentlib好用多了。把XLDownload.dll和zlib1.dll放到程序根目录并添加下面的类即可调用,具体函数说明参见 http://xldoc.xl7.xunlei.com/0000000026/index.html 。转载请注明出处。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace WindowsFormsApplication1
{
class thunder
{
//迅雷下载开放引擎
[DllImport("XLDownload.dll", EntryPoint = "XLInitDownloadEngine")]
public static extern bool XLInitDownloadEngine();
[DllImport("XLDownload.dll", EntryPoint = "XLUninitDownloadEngine")]
public static extern bool XLUninitDownloadEngine();
[DllImport("XLDownload.dll", EntryPoint = "XLURLDownloadToFile", CharSet = CharSet.Auto)]
public static extern int XLURLDownloadToFile(string pszFileName,string pszUrl, string pszRefUrl, ref Int32 lTaskId);
[DllImport("XLDownload.dll", EntryPoint = "XLQueryTaskInfo", CharSet = CharSet.Auto)]
public static extern int XLQueryTaskInfo(int lTaskId, ref int plStatus, ref UInt64 pullFileSize, ref UInt64 pullRecvSize);
[DllImport("XLDownload.dll", EntryPoint = "XLGetErrorMsg",CharSet = CharSet.Auto)]
public static extern int XLGetErrorMsg(int dwErrorId, string pszBuffer,ref int dwSize);
[DllImport("XLDownload.dll", EntryPoint = "XLContinueTask", CharSet = CharSet.Auto)]
public static extern int XLContinueTask(int lTaskId);
[DllImport("XLDownload.dll", EntryPoint = "XLContinueTaskFromTdFile", CharSet = CharSet.Auto)]
public static extern int XLContinueTaskFromTdFile(string pszTdFileFullPath, ref int lTaskId);
[DllImport("XLDownload.dll", EntryPoint = "XLPauseTask", CharSet = CharSet.Auto)]
public static extern int XLPauseTask(int lTaskId, ref int lNewTaskId);
[DllImport("XLDownload.dll", EntryPoint = "XLStopTask", CharSet = CharSet.Auto)]
public static extern int XLStopTask(int lTaskId); public const int TaskStatus_Connect = 0; // 已经建立连接
public const int TaskStatus_Download = 2; // 开始下载
public const int TaskStatus_Pause = 10; // 暂停
public const int TaskStatus_Success = 11; // 成功下载
public const int TaskStatus_Fail = 12; // 下载失败 public const int XL_SUCCESS = 0;
public const int XL_ERROR_FAIL = 0x10000000; // 尚未进行初始化
public const int XL_ERROR_UNINITAILIZE = XL_ERROR_FAIL + 1; // 不支持的协议,目前只支持HTTP
public const int XL_ERROR_UNSPORTED_PROTOCOL = XL_ERROR_FAIL + 2; // 初始化托盘图标失败
public const int XL_ERROR_INIT_TASK_TRAY_ICON_FAIL = XL_ERROR_FAIL + 3; // 添加托盘图标失败
public const int XL_ERROR_ADD_TASK_TRAY_ICON_FAIL = XL_ERROR_FAIL + 4; // 指针为空
public const int XL_ERROR_POINTER_IS_NULL = XL_ERROR_FAIL + 5; // 字符串是空串
public const int XL_ERROR_STRING_IS_EMPTY = XL_ERROR_FAIL + 6; // 传入的路径没有包含文件名
public const int XL_ERROR_PATH_DONT_INCLUDE_FILENAME = XL_ERROR_FAIL + 7; // 创建目录失败
public const int XL_ERROR_CREATE_DIRECTORY_FAIL = XL_ERROR_FAIL + 8; // 内存不足
public const int XL_ERROR_MEMORY_ISNT_ENOUGH = XL_ERROR_FAIL + 9; // 参数不合法
public const int XL_ERROR_INVALID_ARG = XL_ERROR_FAIL + 10; // 任务不存在
public const int XL_ERROR_TASK_DONT_EXIST = XL_ERROR_FAIL + 11; // 文件名不合法
public const int XL_ERROR_FILE_NAME_INVALID = XL_ERROR_FAIL + 12; // 没有实现
public const int XL_ERROR_NOTIMPL = XL_ERROR_FAIL + 13; // 已经创建的任务数达到最大任务数,无法继续创建任务
public const int XL_ERROR_TASKNUM_EXCEED_MAXNUM = XL_ERROR_FAIL + 14; // 任务类型未知
public const int XL_ERROR_INVALID_TASK_TYPE = XL_ERROR_FAIL + 15; // 文件已经存在
public const int XL_ERROR_FILE_ALREADY_EXIST = XL_ERROR_FAIL + 16; // 文件不存在
public const int XL_ERROR_FILE_DONT_EXIST = XL_ERROR_FAIL + 17; // 读取cfg文件失败
public const int XL_ERROR_READ_CFG_FILE_FAIL = XL_ERROR_FAIL + 18; // 写入cfg文件失败
public const int XL_ERROR_WRITE_CFG_FILE_FAIL = XL_ERROR_FAIL + 19; // 无法继续任务,可能是不支持断点续传,也有可能是任务已经失败
// 通过查询任务状态,确定错误原因。
public const int XL_ERROR_CANNOT_CONTINUE_TASK = XL_ERROR_FAIL + 20; // 无法暂停任务,可能是不支持断点续传,也有可能是任务已经失败
// 通过查询任务状态,确定错误原因。
public const int XL_ERROR_CANNOT_PAUSE_TASK = XL_ERROR_FAIL + 21; // 缓冲区太小
public const int XL_ERROR_BUFFER_TOO_SMALL = XL_ERROR_FAIL + 22; // 调用XLInitDownloadEngine的线程,在调用XLUninitDownloadEngine之前已经结束。
// 初始化下载引擎线程,在调用XLUninitDownloadEngine之前,必须保持执行状态。
public const int XL_ERROR_INIT_THREAD_EXIT_TOO_EARLY = XL_ERROR_FAIL + 23; // TP崩溃
public const int XL_ERROR_TP_CRASH = XL_ERROR_FAIL + 24; // 任务不合法,调用XLContinueTaskFromTdFile继续任务。内部任务切换失败时,会产生这个错误。
public const int XL_ERROR_TASK_INVALID = XL_ERROR_FAIL + 25;
}
}

C# 调用迅雷 7 迅雷下载开放引擎的更多相关文章

  1. Python: 调用youtube_dl实现视频下载

    研究PySide与youtube_dl结合实现视频下载,抽丝剥蚕,步步维艰,却也颇有意思. 记录初始心得.界面以PySide之Qt编写,调用youtube_dl下载,回调出下载进度,代码如下: # e ...

  2. python下载地址到迅雷qq旋风下载

    迅雷和qq旋风下载,有加速和离线功能,非常方面,我是在网上看到的原始地址和迅雷地址,qq旋风地址的转化原理.然后用python+pyqt写了一个client 原理: 迅雷: 迅雷下载地址=" ...

  3. javascript与java的相互调用,纯java的javascript引擎rhino(转载)

    1.下载Rhino安装包,下载地址:官网http://www.mozilla.org/rhino. 2.rhino环境配置,把解压出来的js.jar文件加入到系统的环境变量classpath 3.在命 ...

  4. Arch Linux之pacman调用axel多线程加速下载

    转载自 奶牛博客 本来感觉Arch Linux用个国内的源就很给力了,可是到了学校移动的cmcc-edu超级不稳定,而且单线程速度就二三十k,无奈,开多线程下载.在Ubuntu下面可以用apt-fas ...

  5. 最新.net和Java调用SAP RFC中间件下载

    还记得2012年初我发布的全网络第一个关于.net 连接SAP RFC的NCO3原创博文,用的就是SAP出的最新的.Net Connector 3.0的版本,在那个时候都是普遍用其他蹩脚的方式或Web ...

  6. java客户端调用ftp上传下载文件

    1:java客户端上传,下载文件. package com.li.utils; import java.io.File; import java.io.FileInputStream; import ...

  7. [uiautomator篇][python调用java][1]应用下载的插件需要很长时间问题解决

    1第一次打开应用,可能会要求下载插件,我们先在/sdcard/Android/data/<packageName>  或者/data/data/<pakeageName>找到插 ...

  8. js调用后台接口进行下载

    js调用后台接口一定不能用ajax location.href=$$pageContextPath +'downfile/down.do?filname='+row.fileUrl;

  9. cocos2d-x_下载游戏引擎并创建第一个项目

    我是一名小白. 下载并创建游戏项目 第一步:去官网下载cocos2d-x http://www.cocos.com/download 第二步:将安装包里边的 setup.py 拖进命令行点击回车键 , ...

随机推荐

  1. 更改mysql 数据库名称

    //创建新数据库 CREATE DATABASE hbwebTemporary; //移植每个表 RENAME TABLE hbweb.aircraft_info TO hbwebTemporary. ...

  2. Linux Shell 学习笔记 一 目录结构

    以Red Hat Enterprise Linux 各版本为例,RHEL中目录具体作用如下, /bin       存放普通用户使用的命令 /sbin     存放管理员可以执行的命令 /home   ...

  3. BZOJ 1816: [Cqoi2010]扑克牌( 二分答案 )

    二分答案.. 一开始二分的初始右边界太小了然后WA,最后一气之下把它改成了INF... -------------------------------------------------------- ...

  4. PHP解析和生成xml(DOMDocument版)

    上次和大家分享了SimpleXML操作xml的一些知识,但是php中除了simplexml还有DOMDocument,这次就着重来看看DOMDocument的用法,还是把生成xml和解析xml分开写 ...

  5. SVN 无法连接主机:由于目标计算机积极拒绝,无法连接

    问题:使用追溯功能时因为时间太长,所以强行关闭了SVN;当再次连接的时候就发现不能连接到SVN了,错误消息: 无法连接主机:由于目标计算机积极拒绝,无法连接 解决:重启一下服务器的SVN 服务就可以了

  6. LintCode-字符串查找

    题目描述: 对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始).如果不存在,则返回 -1. 说明 ...

  7. Primavera 6.0

    Primavera 6.0(原p3e/c)荟萃了P3软件20年的项目管理精髓和经验,采用最新的IT技术,在大型关系数据库Oracle和MS SQL Server上构架起企业级的.包涵现代项目管理知识体 ...

  8. [置顶] perl脚本中defined,exists和delete关键字的用法和区别

    刚学习perl脚本的时候,喜欢频繁使用defined关键字判断一个hash中某个key是否存在,后来程序出了问题才去perl官方文档查看关于defined关键字的准确使用方法.因此,这里我把perl中 ...

  9. struts2自己定义类型转换器

    1.1.  struts2自己定义类型转换器 1)        自定类型转换类,继承DefaultTypeConverter类 package com.morris.ticket.conversio ...

  10. Android实现视频录制

    安卓实现视频录制,有两种方法,一种是调用自带的视频功能,一种是使用MediaRecorder. 每种方法都有自己的优缺点.接下来,把两种方法的代码写出来. 先说第一种方法,也是最简单的方法,那就是直接 ...