今天到迅雷公司的SDK文档网站上逛了逛,竟然发现它们已经提供了完备的API接口,我心中不禁大喜,但是SDK资料中的原版开发文件已经很难找到了,幸运的是我在github上搜索到了所需的文件,在这里我已经打包完毕,点击 这里 下载。
      在这个SDK中,包含有.h头文件,lib库文件,dll动态链接库文件,迅雷公司,我们首先用VC++提供的Depends工具查看一下dll文件中的函数列表。

从这个函数列表图片,可以看出SDK中提供的功能还是很全面的,对于下载功能的封装还是挺让人满意。下面我来按照代码执行顺序对函数进行相关的解释

XLInitDownloadEngine BOOL __stdcall XLInitDownloadEngine(); 初始化迅雷下载引擎。
XLURLDownloadToFile 根据URL开启下载。
XLQueryTaskInfo 查询指定任务当前状态。
XLStopTask VOID __stdcall XLStopTask(LONG lTaskId); 停止指定任务(必须)。
XLUninitDownloadEngine BOOL __stdcall XLUninitDownloadEngine(); 进行资源回收操作。

上面的函数是一个完整的工作流程,下面我们继续把其他函数做一下介绍。

XLPauseTask DWORD __stdcall XLPauseTask(LONG lTaskId, LONG & lNewTaskId); 暂停指定任务。
XLContinueTask DWORD __stdcall XLContinueTask(LONG lTaskId); 根据编号继续下载。
XLContinueTaskFromTdFile 根据TD文件继续下载。
XLGetErrorMsg 将错误码对应的错误消息拷贝至指定的缓冲区。

特殊参数类型 LONG  &:直接定义LONG类型变量,传进函数即可。


下面我对样例代码进行一些解释

 //VS2008 UNICODE
#include "stdafx.h"
#include <stdio.h>
#include "stdlib.h"
#include <windows.h>
#include "XLDownload.h"
#include "XLError.h"
#pragma comment(lib, "XLDownload.lib") // 唯一的应用程序对象 int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
// 1、初始化下载引擎
if ( FALSE == XLInitDownloadEngine() )
{
printf("Initialize download engine failed.\n");
return ;
}
// 2、启动新任务
// PS:如果链接无法通过,请把工程属性“将wchar_t设置为内置类型 (/Zc:wchar_t)”设置为Yes
LONG lTaskId = ;
DWORD dwRet = XLURLDownloadToFile( //这里开始下载,迅雷把下载和状态查询进行了分离,创新之处
_T("d:\\notepad++.exe"),
_T("http://dlsw.baidu.com/sw-search-sp/soft/cc/13478/npp.6.7.4.Installer.1421032427.exe"),
_T(""), lTaskId); printf("Begin download file.\n"); // 3、查询任务状态
do
{
::Sleep();
system("cls"); //windows 清屏
ULONGLONG ullFileSize = ;
ULONGLONG ullRecvSize = ;
LONG lStatus = -; dwRet = XLQueryTaskInfo(lTaskId, &lStatus, &ullFileSize, &ullRecvSize);
if ( XL_SUCCESS==dwRet )
{
// 输出进度信息
if ( != ullFileSize )
{
double douProgress = (double)ullRecvSize/(double)ullFileSize;
// printf("%.2lfMB",(double)ullRecvSize/8/1024/1024);
douProgress *= 100.0;
printf("Download progress:%.2f%% %.2lfMB\n", douProgress,(double)ullRecvSize//);
}
else
{
printf("File size is zero.\n");
} if ( enumTaskStatus_Success==lStatus )
{
printf("Download successfully.\n");
break;
} if ( enumTaskStatus_Fail==lStatus )
{
printf("Download failed.\n");
break;
}
}
} while( XL_SUCCESS==dwRet ); // 4、无论是否下载成功,都必须调用XLStopTask
XLStopTask(lTaskId); // 5、释放资源
XLUninitDownloadEngine();
return ;
}

迅雷API:实现文件下载的更多相关文章

  1. 迅雷 API 接口说明文档 -调用迅雷自动下载

    我们可以利用迅雷提供的开放API接口来自动下载文件.详细的接口说明大家可以看下面的. 先要说明一下的就是 迅雷的API接口是用 .com 来调用的 首先就是脚本了,各种语言写法不同,我这里提供用vbs ...

  2. ASP.NET Web API编程——文件下载

    断点续传基本原理 HTTP协议中与断点续传相关的HTTP头为:Range和Content-Range标头,断点续传实现流程: 1)客户端请求下载一个文件,文件的总长度为n:已经下载了一部分文件,长度为 ...

  3. ASP.NET Web API 2 之文件下载

    Ø  前言 目前 ASP.NET Web API 的应用非常广泛,主要承载着服务端与客户端的数据传输与处理,如果需要使用 Web API 实现文件下载,该 实现呢,其实也是比较简单,以下示例用于下载安 ...

  4. 解析大型.NET ERP系统架构设计 Framework+ Application 设计模式

    我对大型系统的理解,从数量上面来讲,源代码超过百万行以上,系统有超过300个以上的功能,从质量上来讲系统应该具备良好的可扩展性和可维护性,系统中的功能紧密关联.除去业务上的复杂性,如何设计这样的一个协 ...

  5. NET ERP系统架构设计

    解析大型.NET ERP系统架构设计 Framework+ Application 设计模式 我对大型系统的理解,从数量上面来讲,源代码超过百万行以上,系统有超过300个以上的功能,从质量上来讲系统应 ...

  6. [No000079]罗辑思维2016.1.2日前的所有每日语音,python3做的网络爬虫

    源码地址:https://github.com/charygao/Download_the_LouJiSiWei 写过很久了,vision1.0里有不少bug,今天重新整理修改了一下,运行了一下,2个 ...

  7. gof设计模式回顾

    gof23根据讲师学习笔记回顾: 1.gof:Gang of Four;叫grasp更具有针对性,解决具体的问题; ---------------------总共分为三大类: ---------创建型 ...

  8. Alamofire 4.0 迁移指南

    Alamofire 4.0 是 Alamofire 最新的一个大版本更新, 一个基于 Swift 的 iOS, tvOS, macOS, watchOS 的 HTTP 网络库. 作为一个大版本更新, ...

  9. ASP.NET没有魔法——ASP.NET MVC Razor与View渲染

    对于Web应用来说,它的界面是由浏览器根据HTML代码及其引用的相关资源进行渲染后展示给用户的结果,换句话说Web应用的界面呈现工作是由浏览器完成的,Web应用的原理是通过Http协议从服务器上获取到 ...

随机推荐

  1. java.lang.String小测试

    还记得java.lang.String么,如果现在给你一个小程序,你能说出它的结果么 public static String ab(String a){ return a + "b&quo ...

  2. ubuntu 创建eclipse 快捷方式

    Ubuntu 上链接快捷方式,将想面内容复制并修改,命名为:eclipse.desktop #!/usr/bin/env xdg-open [Desktop Entry] Name=Eclipse C ...

  3. HtmlParser 2.0 中文乱码问题

    对于HTMLParser 2.0 工具包我们需要修改其中的Page.java文件使其适用中文的html文件分析. 主要是把protected static final String DEFAULT_C ...

  4. 使用JMeter做压力测试

    使用JMeter做压力测试 1.下载Jmeter 地址:http://jmeter.apache.org/download_jmeter.cgi 2.启动jmeter 运行bin/jmeter.bat ...

  5. 【GitHub-SwipeMenuListView】针对ListView item的側滑菜单

    项目地址:https://github.com/baoyongzhang/SwipeMenuListView Usage Step 1:import swipemenulistview.jar Ste ...

  6. 菜鸟玩云计算之十六:Ubuntu14.04上创建的虚拟机迁移到RHEL6.4

    菜鸟玩云计算之十六:Ubuntu14.04上创建的RHEL6.4虚拟机迁移到RHEL6.4主机上 RHEL6.4 Server作为虚拟机的HOST,执行以下的命令检查配置和安装相关软件: # egre ...

  7. 自定义控件(视图)2期笔记03:自定义控件之使用系统控件(优酷案例之广告条Viewpager)

    1.首先我们看看运行效果,如下: 2. 下面就是详细实现这个效果的过程: (1)新建一个Android工程,命名为"广告条的效果",如下: (2)这里用到一个控件ViewPager ...

  8. Shell-WEB目录监控

    #!/bin/sh #date:2015-12-08 #filename:check_webfile.sh #作者:李兴利 #Email:1162572407@qq.com #version:v1.1 ...

  9. Asp.Net 下载文件的几种方式

    asp.net下载文件几种方式 protected void Button1_Click(object sender, EventArgs e) { /* 微软为Response对象提供了一个新的方法 ...

  10. sql 字段字符串内容替换

    SELECT * FROM dbo.Table WHERE Name LIKE '%NYCL23%'UPDATE Table SET Name=replace(Name,'NYCL23','WYCL1 ...