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

迅雷下载是目前使用非常普遍的一个下载软件,本文实例展示了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#程序设计能起到一定的借鉴作用。

(0)

相关推荐

  • C#实现支持断点续传多线程下载客户端工具类

    复制代码 代码如下: /* .Net/C#: 实现支持断点续传多线程下载的 Http Web 客户端工具类 (C# DIY HttpWebClient) * Reflector 了一下 System.Net.WebClient ,改写或增加了若干: * DownLoad.Upload 相关方法! * DownLoad 相关改动较大! * 增加了 DataReceive.ExceptionOccurrs 事件! * 了解服务器端与客户端交互的 HTTP 协议参阅: * 使文件下载的自定义连接支持

  • C#同步、异步远程下载文件实例

    1.使用HttpWebRequest/HttpWebResonse和WebClient 复制代码 代码如下: HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); WebResponse response = request.GetResponse(); Stream stream = response.GetResponseStream(); if (!response.ContentType.ToLower().St

  • c#文件下载示例的4种方法分享

    复制代码 代码如下: using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System

  • 关于c#连接ftp进行上传下载实现原理及代码

    复制代码 代码如下: using System; using System.Collections.Generic; using System.Text; using System.Net; using System.IO; namespace ftponload { class Program { static void Main(string[] args) { //上传文件的方法 onload("D://outPut.txt"); //下载文件的方法 fload(); } pub

  • C#实现多线程下载文件的方法

    本文实例讲述了C#实现多线程下载文件的方法.分享给大家供大家参考.具体实现方法如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Threading; using System.Net; namespace WfpApp { public class MultiDownload { #region 变量 pri

  • C#下载网页并在控制台输出的方法

    本文实例讲述了C#下载网页并在控制台输出的方法.分享给大家供大家参考.具体实现方法如下: using System; using System.Net; using System.Text; using System.IO; namespace Test { class GetWebPage { public static void Main(string[] args) { for(int i=0;ilt;args.Length;i++) { HttpWebRequest httpWebReq

  • C#实现文件断点续传下载的方法

    本文实例讲述了C#实现文件断点续传下载的方法.分享给大家供大家参考.具体实现方法如下: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.IO; using System.Text; using System.Net; namespace simpleDemo { class Program { /// <su

  • C#实现word文件下载的代码

    效果: 思路: 简单的有两种方式下载,一种是流下载,一种是WriteFile下载.以下是使用WriteFile下载. 代码: 复制代码 代码如下: protected void LinkButton1_Click(object sender, EventArgs e)        {            try            {                //WriteFile实现下载(word)                string fileName = "qingpin

  • C#实现HTTP下载文件的方法

    本文实例讲述了C#实现HTTP下载文件的方法.分享给大家供大家参考. 主要实现代码如下: 复制代码 代码如下: /// <summary> /// Http下载文件 /// </summary> public static string HttpDownloadFile(string url, string path) {     // 设置参数     HttpWebRequest request = WebRequest.Create(url) as HttpWebReques

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

    迅雷下载是目前使用非常普遍的一个下载软件,本文实例展示了C#实现调用迅雷下载的方法.具体方法如下: 目前该实例代码只支持HTTP协议,具体功能代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; using System.Threading; namespace ThunderSDK { cl

  • 用js调用迅雷下载代码的二种方法

    方法一: 复制代码 代码如下: html> </head> <script type="text/javascript"> //初始化迅雷插件 function InitialActiveXObject() { var Thunder; try { Thunder = new ActiveXObject("ThunderAgent.Agent") }catch(e) { try { Thunder=new ActiveXObject(&

  • 详解PHP防止盗链防止迅雷下载的方法

    防止盗链: 原理:当服务器要我们下载文件的时候,我们会拿到一个链接,然后我们通过这个链接找到这个文件,然后将它下载下来.那么也就是说这个链接必须要有的,那么如何防止盗链呢?那就是给你的链接并不是真正的文件链接了.这一点很容易想到,那么不给你真正的链接又怎样让你下载文件呢? 我们在用php做网页的时候,总是会把php代码穿插在HTML代码中间,然后用php去生成剩下的代码,然后传给客户端,也就是说客户端会接受到我们php脚本运行的结果.也就是说:如果我的php脚本运行的结果就是你要下载的文件.这样

  • win2008中限制使用迅雷下载的方法[软件策略]

    这不,巧妙对windows server 2008系统的组策略功能进行深入挖掘,我们可以发现许多安全应用秘密;现在本文就为各位朋友贡献几则这样的安全秘密,希望能对大家有用! 1.限制使用迅雷进行恶意下载 在多人共同使用相同的一台计算机进行工作时,我们肯定不希望普通用户随意使用迅雷工具进行恶意下载,这样不但容易浪费本地系统的磁盘空间资源,而且也会大大消耗本地系统的上网带宽资源.而在windows server 2008系统环境下,限制普通用户随意使用迅雷工具进行恶意下载的方法有很多,例如可以利用w

  • Android在WebView中调用系统下载的方法

    前言 最近发现项目中的WebView加载下载页的时候是一片空白,没有出现下载,于是简单的调用了系统的下载对其进行下载. 过程 自定义一个下载监听,实现了DownloadListener这个接口 class MyDownloadStart implements DownloadListener{ @Override public void onDownloadStart(String url, String userAgent, String contentDisposition, String

  • [导入][原创]用脚本控制迅雷下载

    一个网上的朋友想用脚本调用迅雷下载,于是我研究了一下,觉得可以,弄出来跟大家分享 首先呢,找到迅雷在IE右健添加的东东:"用迅雷下载链接".于是打开注册表,运行regedit,选中项,HKEY_CURRENT_USER\Software\Microsoft 查找:"迅雷".结果出来了,放在 HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt ,然后在右边的窗口发现了两个文件:geturl.ht

  • jQuery实现ajax调用WCF服务的方法(附带demo下载)

    本文实例讲述了jQuery实现ajax调用WCF服务的方法.分享给大家供大家参考,具体如下: 关于AJAX调用WCF服务分为跨域和不跨域两种方式,今天咱们先介绍下不跨域下的调用方法.DEMO是在VS2008写的. 经过测试与研究,发现AJAX调用WCF服务必须满足以下条件 1.wcf的通讯方式必须使用webHttpBinding 2.必须设置<endpointBehaviors>节点的值 3.服务的实现必须添加标记 复制代码 代码如下: [AspNetCompatibilityRequirem

  • C++调用迅雷接口解析XML下载功能(迅雷下载功能)

    迅雷下载库的网址:http://thunderplatform.xunlei.com 复制代码 代码如下: // FileName: Download.h#pragma once#include "lib\XLDownload.h"#include "lib\XLError.h"#include <vector> // 下载队列的大小,决定同时开启下载线程的数量const int LIMIT = 2; struct Down{    // 解析出来的下载

  • Asp.net生成Excel文件并下载(更新:解决使用迅雷下载页面而不是文件的问题)

    这里采用的是在服务端先生成Excel文件,然后利用文件地址下载的方法. 生成Excel文件的方法,见:[原].Net创建Excel文件(插入数据.修改格式.生成图表)的方法 先试用Response.WriteFile的方法: 复制代码 代码如下: FileInfo fi = new FileInfo(excelFile);//excelFile为文件在服务器上的地址 HttpResponse contextResponse = HttpContext.Current.Response; cont

  • Python实现115网盘自动下载的方法

    本文实例讲述了Python实现115网盘自动下载的方法.分享给大家供大家参考.具体实现方法如下: 实例中的1.txt,是网页http://bbs.pediy.com/showthread.php?t=144788另存为1.txt 通过每3秒钟复制一个下载链接到粘贴板,复制时会自动调用115客户端下载,每下载10个文件会手工输入一个字符,防止一下下载太多,卡死机器 具体代码如下: import re, os, time import webbrowser import urllib if __na

随机推荐