C#实现调用迅雷下载的方法
迅雷下载是目前使用非常普遍的一个下载软件,本文实例展示了C#实现调用迅雷下载的方法。具体方法如下:
目前该实例代码只支持HTTP协议,具体功能代码如下:
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Runtime.InteropServices; usingSystem.Threading; namespaceThunderSDK { classProgram { enumenumTaskStatus { enumTaskStatus_Connect=0,//已经建立连接 enumTaskStatus_Download=2,//开始下载 enumTaskStatus_Pause=10,//暂停 enumTaskStatus_Success=11,//成功下载 enumTaskStatus_Fail=12,//下载失败 }; publicconstintXL_SUCCESS=0; publicconstintXL_ERROR_FAIL=0x10000000; //尚未进行初始化 publicconstintXL_ERROR_UNINITAILIZE=XL_ERROR_FAIL+1; //不支持的协议,目前只支持HTTP publicconstintXL_ERROR_UNSPORTED_PROTOCOL=XL_ERROR_FAIL+2; //初始化托盘图标失败 publicconstintXL_ERROR_INIT_TASK_TRAY_ICON_FAIL=XL_ERROR_FAIL+3; //添加托盘图标失败 publicconstintXL_ERROR_ADD_TASK_TRAY_ICON_FAIL=XL_ERROR_FAIL+4; //指针为空 publicconstintXL_ERROR_POINTER_IS_NULL=XL_ERROR_FAIL+5; //字符串是空串 publicconstintXL_ERROR_STRING_IS_EMPTY=XL_ERROR_FAIL+6; //传入的路径没有包含文件名 publicconstintXL_ERROR_PATH_DONT_INCLUDE_FILENAME=XL_ERROR_FAIL+7; //创建目录失败 publicconstintXL_ERROR_CREATE_DIRECTORY_FAIL=XL_ERROR_FAIL+8; //内存不足 publicconstintXL_ERROR_MEMORY_ISNT_ENOUGH=XL_ERROR_FAIL+9; //参数不合法 publicconstintXL_ERROR_INVALID_ARG=XL_ERROR_FAIL+10; //任务不存在 publicconstintXL_ERROR_TASK_DONT_EXIST=XL_ERROR_FAIL+11; //文件名不合法 publicconstintXL_ERROR_FILE_NAME_INVALID=XL_ERROR_FAIL+12; //没有实现 publicconstintXL_ERROR_NOTIMPL=XL_ERROR_FAIL+13; //已经创建的任务数达到最大任务数,无法继续创建任务 publicconstintXL_ERROR_TASKNUM_EXCEED_MAXNUM=XL_ERROR_FAIL+14; //任务类型未知 publicconstintXL_ERROR_INVALID_TASK_TYPE=XL_ERROR_FAIL+15; //文件已经存在 publicconstintXL_ERROR_FILE_ALREADY_EXIST=XL_ERROR_FAIL+16; //文件不存在 publicconstintXL_ERROR_FILE_DONT_EXIST=XL_ERROR_FAIL+17; //读取cfg文件失败 publicconstintXL_ERROR_READ_CFG_FILE_FAIL=XL_ERROR_FAIL+18; //写入cfg文件失败 publicconstintXL_ERROR_WRITE_CFG_FILE_FAIL=XL_ERROR_FAIL+19; //无法继续任务,可能是不支持断点续传,也有可能是任务已经失败 //通过查询任务状态,确定错误原因。 publicconstintXL_ERROR_CANNOT_CONTINUE_TASK=XL_ERROR_FAIL+20; //无法暂停任务,可能是不支持断点续传,也有可能是任务已经失败 //通过查询任务状态,确定错误原因。 publicconstintXL_ERROR_CANNOT_PAUSE_TASK=XL_ERROR_FAIL+21; //缓冲区太小 publicconstintXL_ERROR_BUFFER_TOO_SMALL=XL_ERROR_FAIL+22; //调用XLInitDownloadEngine的线程,在调用XLUninitDownloadEngine之前已经结束。 //初始化下载引擎线程,在调用XLUninitDownloadEngine之前,必须保持执行状态。 publicconstintXL_ERROR_INIT_THREAD_EXIT_TOO_EARLY=XL_ERROR_FAIL+23; [DllImport("XLDownload.dll",EntryPoint="XLInitDownloadEngine")] publicstaticexternboolXLInitDownloadEngine(); [DllImport("XLDownload.dll",EntryPoint="XLURLDownloadToFile",CharSet=CharSet.Unicode)] publicstaticexternintXLURLDownloadToFile(stringpszFileName,stringpszUrl,stringpszRefUrl,refInt32lTaskId); [DllImport("XLDownload.dll")] publicstaticexternintXLQueryTaskInfo(intlTaskId,refintplStatus,refdoublepullFileSize,refdoublepullRecvSize); [DllImport("XLDownload.dll")] publicstaticexternintXLPauseTask(intlTaskId,refintlNewTaskId); [DllImport("XLDownload.dll")] publicstaticexternintXLContinueTask(intlTaskId); [DllImport("XLDownload.dll")] publicstaticexternintXLContinueTaskFromTdFile(stringpszTdFileFullPath,refintlTaskId); [DllImport("XLDownload.dll")] publicstaticexternvoidXLStopTask(intlTaskId); [DllImport("XLDownload.dll")] publicstaticexternboolXLUninitDownloadEngine(); [DllImport("XLDownload.dll")] publicstaticexternintXLGetErrorMsg(intdwErrorId,stringpszBuffer,refintdwSize); staticvoidMain(string[]args) { if(!XLInitDownloadEngine()) { Console.WriteLine("下载引擎初始化错误"); return; } Int32lTaskId=0; stringfilename="d://xx.exe"; stringurl="http://xmp.down.sandai.net/kankan/XMPSetup_3.8.1.485-www.exe"; stringrefurl="http://xmp.down.sandai.net"; intdwRet=XLURLDownloadToFile(filename,url,refurl,reflTaskId); if(XL_SUCCESS!=dwRet) { XLUninitDownloadEngine(); Console.WriteLine("添加新任务失败"); return; } Console.WriteLine("开始下载"); do { Thread.Sleep(1000); doublepullFileSize=0; doublepullRecvSize=0; intlStatus=-1; dwRet=XLQueryTaskInfo(lTaskId,reflStatus,refpullFileSize,refpullRecvSize); if(XL_SUCCESS==dwRet) { if((int)enumTaskStatus.enumTaskStatus_Success==lStatus) { Console.WriteLine("下载完成"); break; } if(0!=pullFileSize) { doubledouProcess=(double)pullRecvSize/(double)pullFileSize; douProcess*=100.0; Console.WriteLine("下载进度:{0}%",douProcess); } else { Console.WriteLine("文件长度为0"); } } }while(XL_SUCCESS==dwRet); XLStopTask(lTaskId); XLUninitDownloadEngine(); } } }
希望本文实例对大家学习C#程序设计能起到一定的借鉴作用。