欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#实现调用迅雷下载的方法

程序员文章站 2023-12-17 21:46:22
迅雷下载是目前使用非常普遍的一个下载软件,本文实例展示了c#实现调用迅雷下载的方法。具体方法如下: 目前该实例代码只支持http协议,具体功能代码如下: usi...

迅雷下载是目前使用非常普遍的一个下载软件,本文实例展示了c#实现调用迅雷下载的方法。具体方法如下:

目前该实例代码只支持http协议,具体功能代码如下:

using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.runtime.interopservices;
using system.threading;

namespace thundersdk
{
 class program
 {
 enum enumtaskstatus
 {
  enumtaskstatus_connect = 0,         // 已经建立连接
  enumtaskstatus_download = 2,        // 开始下载 
  enumtaskstatus_pause = 10,         // 暂停
  enumtaskstatus_success = 11,        // 成功下载
  enumtaskstatus_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;

 [dllimport("xldownload.dll", entrypoint = "xlinitdownloadengine")]
 public static extern bool xlinitdownloadengine();
 [dllimport("xldownload.dll", entrypoint = "xlurldownloadtofile", charset = charset.unicode)]
 public static extern int xlurldownloadtofile(string pszfilename, string pszurl, string pszrefurl, ref int32 ltaskid);
 [dllimport("xldownload.dll")]
 public static extern int xlquerytaskinfo(int ltaskid, ref int plstatus, ref double pullfilesize, ref double pullrecvsize);
 [dllimport("xldownload.dll")]
 public static extern int xlpausetask(int ltaskid, ref int lnewtaskid);
 [dllimport("xldownload.dll")]
 public static extern int xlcontinuetask(int ltaskid);
 [dllimport("xldownload.dll")]
 public static extern int xlcontinuetaskfromtdfile(string psztdfilefullpath, ref int ltaskid);
 [dllimport("xldownload.dll")]
 public static extern void xlstoptask(int ltaskid);
 [dllimport("xldownload.dll")]
 public static extern bool xluninitdownloadengine();
 [dllimport("xldownload.dll")]
 public static extern int xlgeterrormsg(int dwerrorid, string pszbuffer, ref int dwsize);

 static void main(string[] args)
 {
  if (!xlinitdownloadengine())
  {
  console.writeline("下载引擎初始化错误");
  return;
  }

  int32 ltaskid = 0;
  string filename = "d://xx.exe";
  string url = "http://xmp.down.sandai.net/kankan/xmpsetup_3.8.1.485-www.exe";
  string refurl = "http://xmp.down.sandai.net";
  int dwret = xlurldownloadtofile(filename, url, refurl, ref ltaskid);
  if (xl_success != dwret)
  {
  xluninitdownloadengine();
  console.writeline("添加新任务失败");
  return;
  }
  console.writeline("开始下载");
  do
  {
  thread.sleep(1000);
  double pullfilesize = 0;
  double pullrecvsize = 0;
  int lstatus = -1;
  dwret = xlquerytaskinfo(ltaskid, ref lstatus, ref pullfilesize, ref pullrecvsize);
  if (xl_success == dwret)
  {
   if ((int)enumtaskstatus.enumtaskstatus_success == lstatus)
   {
   console.writeline("下载完成");
   break;
   }
   if (0 != pullfilesize)
   {
   double douprocess = (double)pullrecvsize / (double)pullfilesize;
   douprocess *= 100.0;
   console.writeline("下载进度:{0}%", douprocess);
   }
   else
   {
   console.writeline("文件长度为0");
   }

  }
  } while (xl_success == dwret);
  xlstoptask(ltaskid);
  xluninitdownloadengine();
 }
 }
}

希望本文实例对大家学习c#程序设计能起到一定的借鉴作用。

上一篇:

下一篇: