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#程序设计能起到一定的借鉴作用。