C# 调用迅雷 7 迅雷下载开放引擎
最近有个项目需要用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 迅雷下载开放引擎的更多相关文章
- Python: 调用youtube_dl实现视频下载
研究PySide与youtube_dl结合实现视频下载,抽丝剥蚕,步步维艰,却也颇有意思. 记录初始心得.界面以PySide之Qt编写,调用youtube_dl下载,回调出下载进度,代码如下: # e ...
- python下载地址到迅雷qq旋风下载
迅雷和qq旋风下载,有加速和离线功能,非常方面,我是在网上看到的原始地址和迅雷地址,qq旋风地址的转化原理.然后用python+pyqt写了一个client 原理: 迅雷: 迅雷下载地址=" ...
- javascript与java的相互调用,纯java的javascript引擎rhino(转载)
1.下载Rhino安装包,下载地址:官网http://www.mozilla.org/rhino. 2.rhino环境配置,把解压出来的js.jar文件加入到系统的环境变量classpath 3.在命 ...
- Arch Linux之pacman调用axel多线程加速下载
转载自 奶牛博客 本来感觉Arch Linux用个国内的源就很给力了,可是到了学校移动的cmcc-edu超级不稳定,而且单线程速度就二三十k,无奈,开多线程下载.在Ubuntu下面可以用apt-fas ...
- 最新.net和Java调用SAP RFC中间件下载
还记得2012年初我发布的全网络第一个关于.net 连接SAP RFC的NCO3原创博文,用的就是SAP出的最新的.Net Connector 3.0的版本,在那个时候都是普遍用其他蹩脚的方式或Web ...
- java客户端调用ftp上传下载文件
1:java客户端上传,下载文件. package com.li.utils; import java.io.File; import java.io.FileInputStream; import ...
- [uiautomator篇][python调用java][1]应用下载的插件需要很长时间问题解决
1第一次打开应用,可能会要求下载插件,我们先在/sdcard/Android/data/<packageName> 或者/data/data/<pakeageName>找到插 ...
- js调用后台接口进行下载
js调用后台接口一定不能用ajax location.href=$$pageContextPath +'downfile/down.do?filname='+row.fileUrl;
- cocos2d-x_下载游戏引擎并创建第一个项目
我是一名小白. 下载并创建游戏项目 第一步:去官网下载cocos2d-x http://www.cocos.com/download 第二步:将安装包里边的 setup.py 拖进命令行点击回车键 , ...
随机推荐
- HDU1171:Big Event in HDU(多重背包分析)
通过分析,要使A>=B并且差值最小.所以只要使sum/2的容量下,B最大就Ok了 #include<iostream> #include<cstdio> #include ...
- C程序的存储空间布局
历史沿袭至今,C程序一直由下列几部分组成: 1. 正文段.这是由CPU执行的机器指令部分.通常,正文段是可共享的,所以即使是频繁执行的程序(编辑器,编译器,命令解释器)在存储器中也只需一个副本,另外正 ...
- BZOJ 2096: [Poi2010]Pilots( set )
用个set维护就可以水过去...O(NlogN) 应该可以用单调队列O(N).... --------------------------------------------------------- ...
- JQuery中判断checkbox是否选中与禁用鼠标右键
if ($("#wds_checkbox").attr("checked")) { flag = ; } else { flag = ; } 禁用鼠标右键 // ...
- python中3个帮助函数help、dir、type的使用
1.help函数:查看模块.函数.变量的详细说明: 查看模块 help("modules") 查看包 help("json") 查看类 help(json.J ...
- iOS开发项目名称修改
前言:在IOS开发中,有时候想改一下项目的名字,都会遇到很多麻烦.直接改项目名吧,XCODE又不会帮你改所有的名字.总是有很多文件.文件夹或者是项目设置的项.而且都是不能随便改的,有时候改着改着,编译 ...
- selenium - Headless Browser and scraping - solutions - Stack Overflow
yum install pygtk2-devel selenium - Headless Browser and scraping - solutions - Stack Overflow Hea ...
- Node.cluster
nodejs是一个单进程单线程的引擎,只能利用到单个cpu进行计算,面对当今服务器性能的提高,cpu的利用率显然对node应有的性能大打折扣,面对这个问题,cluster应运而生. cluster介绍 ...
- Android中获取系统的时间
activity代码 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); set ...
- srm 534
250 Description 给你一个1*n的棋盘.两人轮流行动,每一个人能够把"o"向右移动到空格子.或者跨越连续两个"o"到空格子. 一个"o& ...