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

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Runtime.InteropServices;
  6. namespace WindowsFormsApplication1
  7. {
  8. class thunder
  9. {
  10. //迅雷下载开放引擎
  11. [DllImport("XLDownload.dll", EntryPoint = "XLInitDownloadEngine")]
  12. public static extern bool XLInitDownloadEngine();
  13. [DllImport("XLDownload.dll", EntryPoint = "XLUninitDownloadEngine")]
  14. public static extern bool XLUninitDownloadEngine();
  15. [DllImport("XLDownload.dll", EntryPoint = "XLURLDownloadToFile", CharSet = CharSet.Auto)]
  16. public static extern int XLURLDownloadToFile(string pszFileName,string pszUrl, string pszRefUrl, ref Int32 lTaskId);
  17. [DllImport("XLDownload.dll", EntryPoint = "XLQueryTaskInfo", CharSet = CharSet.Auto)]
  18. public static extern int XLQueryTaskInfo(int lTaskId, ref int plStatus, ref UInt64 pullFileSize, ref UInt64 pullRecvSize);
  19. [DllImport("XLDownload.dll", EntryPoint = "XLGetErrorMsg",CharSet = CharSet.Auto)]
  20. public static extern int XLGetErrorMsg(int dwErrorId, string pszBuffer,ref int dwSize);
  21. [DllImport("XLDownload.dll", EntryPoint = "XLContinueTask", CharSet = CharSet.Auto)]
  22. public static extern int XLContinueTask(int lTaskId);
  23. [DllImport("XLDownload.dll", EntryPoint = "XLContinueTaskFromTdFile", CharSet = CharSet.Auto)]
  24. public static extern int XLContinueTaskFromTdFile(string pszTdFileFullPath, ref int lTaskId);
  25. [DllImport("XLDownload.dll", EntryPoint = "XLPauseTask", CharSet = CharSet.Auto)]
  26. public static extern int XLPauseTask(int lTaskId, ref int lNewTaskId);
  27. [DllImport("XLDownload.dll", EntryPoint = "XLStopTask", CharSet = CharSet.Auto)]
  28. public static extern int XLStopTask(int lTaskId);
  29.  
  30. public const int TaskStatus_Connect = 0; // 已经建立连接
  31. public const int TaskStatus_Download = 2; // 开始下载
  32. public const int TaskStatus_Pause = 10; // 暂停
  33. public const int TaskStatus_Success = 11; // 成功下载
  34. public const int TaskStatus_Fail = 12; // 下载失败
  35.  
  36. public const int XL_SUCCESS = 0;
  37. public const int XL_ERROR_FAIL = 0x10000000;
  38.  
  39. // 尚未进行初始化
  40. public const int XL_ERROR_UNINITAILIZE = XL_ERROR_FAIL + 1;
  41.  
  42. // 不支持的协议,目前只支持HTTP
  43. public const int XL_ERROR_UNSPORTED_PROTOCOL = XL_ERROR_FAIL + 2;
  44.  
  45. // 初始化托盘图标失败
  46. public const int XL_ERROR_INIT_TASK_TRAY_ICON_FAIL = XL_ERROR_FAIL + 3;
  47.  
  48. // 添加托盘图标失败
  49. public const int XL_ERROR_ADD_TASK_TRAY_ICON_FAIL = XL_ERROR_FAIL + 4;
  50.  
  51. // 指针为空
  52. public const int XL_ERROR_POINTER_IS_NULL = XL_ERROR_FAIL + 5;
  53.  
  54. // 字符串是空串
  55. public const int XL_ERROR_STRING_IS_EMPTY = XL_ERROR_FAIL + 6;
  56.  
  57. // 传入的路径没有包含文件名
  58. public const int XL_ERROR_PATH_DONT_INCLUDE_FILENAME = XL_ERROR_FAIL + 7;
  59.  
  60. // 创建目录失败
  61. public const int XL_ERROR_CREATE_DIRECTORY_FAIL = XL_ERROR_FAIL + 8;
  62.  
  63. // 内存不足
  64. public const int XL_ERROR_MEMORY_ISNT_ENOUGH = XL_ERROR_FAIL + 9;
  65.  
  66. // 参数不合法
  67. public const int XL_ERROR_INVALID_ARG = XL_ERROR_FAIL + 10;
  68.  
  69. // 任务不存在
  70. public const int XL_ERROR_TASK_DONT_EXIST = XL_ERROR_FAIL + 11;
  71.  
  72. // 文件名不合法
  73. public const int XL_ERROR_FILE_NAME_INVALID = XL_ERROR_FAIL + 12;
  74.  
  75. // 没有实现
  76. public const int XL_ERROR_NOTIMPL = XL_ERROR_FAIL + 13;
  77.  
  78. // 已经创建的任务数达到最大任务数,无法继续创建任务
  79. public const int XL_ERROR_TASKNUM_EXCEED_MAXNUM = XL_ERROR_FAIL + 14;
  80.  
  81. // 任务类型未知
  82. public const int XL_ERROR_INVALID_TASK_TYPE = XL_ERROR_FAIL + 15;
  83.  
  84. // 文件已经存在
  85. public const int XL_ERROR_FILE_ALREADY_EXIST = XL_ERROR_FAIL + 16;
  86.  
  87. // 文件不存在
  88. public const int XL_ERROR_FILE_DONT_EXIST = XL_ERROR_FAIL + 17;
  89.  
  90. // 读取cfg文件失败
  91. public const int XL_ERROR_READ_CFG_FILE_FAIL = XL_ERROR_FAIL + 18;
  92.  
  93. // 写入cfg文件失败
  94. public const int XL_ERROR_WRITE_CFG_FILE_FAIL = XL_ERROR_FAIL + 19;
  95.  
  96. // 无法继续任务,可能是不支持断点续传,也有可能是任务已经失败
  97. // 通过查询任务状态,确定错误原因。
  98. public const int XL_ERROR_CANNOT_CONTINUE_TASK = XL_ERROR_FAIL + 20;
  99.  
  100. // 无法暂停任务,可能是不支持断点续传,也有可能是任务已经失败
  101. // 通过查询任务状态,确定错误原因。
  102. public const int XL_ERROR_CANNOT_PAUSE_TASK = XL_ERROR_FAIL + 21;
  103.  
  104. // 缓冲区太小
  105. public const int XL_ERROR_BUFFER_TOO_SMALL = XL_ERROR_FAIL + 22;
  106.  
  107. // 调用XLInitDownloadEngine的线程,在调用XLUninitDownloadEngine之前已经结束。
  108. // 初始化下载引擎线程,在调用XLUninitDownloadEngine之前,必须保持执行状态。
  109. public const int XL_ERROR_INIT_THREAD_EXIT_TOO_EARLY = XL_ERROR_FAIL + 23;
  110.  
  111. // TP崩溃
  112. public const int XL_ERROR_TP_CRASH = XL_ERROR_FAIL + 24;
  113.  
  114. // 任务不合法,调用XLContinueTaskFromTdFile继续任务。内部任务切换失败时,会产生这个错误。
  115. public const int XL_ERROR_TASK_INVALID = XL_ERROR_FAIL + 25;
  116. }
  117. }

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. HDU1171:Big Event in HDU(多重背包分析)

    通过分析,要使A>=B并且差值最小.所以只要使sum/2的容量下,B最大就Ok了 #include<iostream> #include<cstdio> #include ...

  2. C程序的存储空间布局

    历史沿袭至今,C程序一直由下列几部分组成: 1. 正文段.这是由CPU执行的机器指令部分.通常,正文段是可共享的,所以即使是频繁执行的程序(编辑器,编译器,命令解释器)在存储器中也只需一个副本,另外正 ...

  3. BZOJ 2096: [Poi2010]Pilots( set )

    用个set维护就可以水过去...O(NlogN) 应该可以用单调队列O(N).... --------------------------------------------------------- ...

  4. JQuery中判断checkbox是否选中与禁用鼠标右键

    if ($("#wds_checkbox").attr("checked")) { flag = ; } else { flag = ; } 禁用鼠标右键 // ...

  5. python中3个帮助函数help、dir、type的使用

    1.help函数:查看模块.函数.变量的详细说明: 查看模块 help("modules") 查看包  help("json") 查看类 help(json.J ...

  6. iOS开发项目名称修改

    前言:在IOS开发中,有时候想改一下项目的名字,都会遇到很多麻烦.直接改项目名吧,XCODE又不会帮你改所有的名字.总是有很多文件.文件夹或者是项目设置的项.而且都是不能随便改的,有时候改着改着,编译 ...

  7. selenium - Headless Browser and scraping - solutions - Stack Overflow

    yum install pygtk2-devel   selenium - Headless Browser and scraping - solutions - Stack Overflow Hea ...

  8. Node.cluster

    nodejs是一个单进程单线程的引擎,只能利用到单个cpu进行计算,面对当今服务器性能的提高,cpu的利用率显然对node应有的性能大打折扣,面对这个问题,cluster应运而生. cluster介绍 ...

  9. Android中获取系统的时间

    activity代码 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); set ...

  10. srm 534

    250 Description 给你一个1*n的棋盘.两人轮流行动,每一个人能够把"o"向右移动到空格子.或者跨越连续两个"o"到空格子. 一个"o& ...