[Qt]在Qt c++中调用迅雷openSDK,使用迅雷批量下载文件(demo程序)

news/2024/4/19 0:10:56

0:为什么要使用迅雷下载

  • 迅雷有多牛就不说了,有多流氓也不说了

  • 开通了迅雷vip的用户,也知道迅雷有多好用了,毕竟还是花了钱的

  • 正在写某资源网站的下载器,自己下的下载器,速度太Low了,吃力不讨好的活

  • 把下载文件的任务全交给迅雷就OK,自己只需要关注爬取资源的过程 

1:Demo程序

  • 先是在网上找了一通,没有找到用C++调用迅雷下载的例子,很多例子都是好多年前使用VB写的脚本

  • 程序本身也不复杂,仅仅是使用Qt的<QLibrary>库,调用迅雷的dll文件中的函数

  • 下面把程序内容和下载链接放出来,希望能帮到有需要的朋友

2:使用效果如下图

图片描述

程序内容如下

1:main.cpp文件的内容


#include <QApplication>
#include <QTextStream>
#include <QLibrary>
#include "xldownloader.h"/*
LONG XL_CreateTaskByThunder(wchar_t *pszUrl, wchar_t *pszFileName, wchar_t *pszReferUrl, wchar_t *pszCharSet, wchar_t *pszCookie)[in] pszUrl,任务URL
[in] pszFileName,下载保存的文件名
[in] pszReferUrl,引用页URL
[in] pszCharSet,当前网页的字符集
[in] pszCookie,下载数据所需的cookie*/typedef bool (*XLinit)(void);//定义函数指针,以备调用
typedef long (*XLdownloader)(const wchar_t *pszUrl, const wchar_t *pszFileName, wchar_t *pszReferUrl, wchar_t *pszCharSet, wchar_t *pszCookie);
int main(int argc, char *argv[])
{QApplication a(argc, argv);XLDownloader mainwindow;mainwindow.setWindowTitle("使用QT调用迅雷下载demo程序");mainwindow.show();return a.exec();
}

2:xldownloader.h文件的内容

#ifndef XLDOWNLOADER_H
#define XLDOWNLOADER_H#include <QWidget>
#include <QTextStream>
#include <QLibrary>
#include <QUrl>
#include "ui_xldownloader.h"
namespace Ui {
class XLDownloader;
}class XLDownloader : public QWidget
{Q_OBJECTpublic:explicit XLDownloader(QWidget *parent = 0);~XLDownloader();private:Ui::XLDownloader *ui;typedef bool (*XLinit)(void);//定义迅雷下载初始化函数指针类型XLinit xlinit; //初始化函数typedef long (*XLdownloader)(const wchar_t *pszUrl, const wchar_t *pszFileName, wchar_t *pszReferUrl, wchar_t *pszCharSet, wchar_t *pszCookie);//定义迅雷下载 下载文件函数指针类型XLdownloader xldownloader;//下载文件函数QTextStream qcout;bool initXunLei(){QLibrary mylib("./ThunderOpenSDK/xldl.dll");   //声明所用到的dll文件if (mylib.load()){qcout<<"load xldl.dll sucess"<<endl;xlinit=(XLinit)mylib.resolve("XL_Init");    //得到在dll文件中的XL_Init函数指针bool retflag=xlinit();                      //调用迅雷程序初始化程序if (retflag==false)                       //返回fasle,则迅雷初始化失败{qcout<<"initialize thunder failed"<<endl;return false;}else                                       //初始化成功 {qcout<<"initialize thunder sucess"<<endl;xldownloader=(XLdownloader)mylib.resolve("XL_CreateTaskByThunder");  //创建迅雷下载函数指针return true;}}else{qcout<<"load xldl.dll failed"<<endl;return false;}}bool downloadWithXL(QString url,QString filename){const wchar_t *xlurl=reinterpret_cast< const wchar_t *>(url.utf16());const wchar_t *xlfn=reinterpret_cast< const wchar_t *>(filename.utf16());long retdown=xldownloader(xlurl,xlfn,NULL,NULL,NULL);if (retdown==0){qcout<<"add thunder task sucess"<<endl;return true;}else{qcout<<"add thunder task failed"<<endl;return false;}}private slots:void onClickedDownloadButton(){QString url= ui->lineEdit->text();//用户在输入url时,一定要输入http:// ,后面可以添加让程序自己判断部分QUrl qurl(url);QString filename=qurl.fileName();//qcout<<"filename is "<<filename<<endl;if(filename.isEmpty()){filename="index.html";}//qcout<<"filename is "<<filename<<endl;//return ;if(!url.isEmpty())downloadWithXL(url,filename);}};#endif // XLDOWNLOADER_H

3:xldownloader.cpp文件的内容

#include "xldownloader.h"
#include "ui_xldownloader.h"XLDownloader::XLDownloader(QWidget *parent) :QWidget(parent),qcout(stdout),ui(new Ui::XLDownloader)
{ui->setupUi(this);bool XLflag=initXunLei();if (!XLflag)exit(1);connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(onClickedDownloadButton()));
}XLDownloader::~XLDownloader()
{delete ui;
}

3:源码下载链接见下

开发平台:Win10 64位 Qt5.6 Qt_Creator
百度云:http://pan.baidu.com/s/1jIPKwnG


https://dhexx.cn/news/show-1668414.html

相关文章

今天IPv6在全球范围内正式启用

6月6日消息&#xff0c;今天IPv6在全球范围内正式启用&#xff0c;这将逐步取代目前的IPv4协议。 据统计&#xff0c;截至6月4日&#xff0c;参加IPv6Launch的网站中&#xff0c;美国有71%可在IPv6上存取&#xff0c;中国则为65%左右。 随着科技的发展&#xff0c;接入互联…

ProcessingJoy —— 如何保存带透明通道的 png 【JAVA】

效果图 代码和注释 PGraphics alphaG;void setup() {//size(400, 400);//alphaG = createGraphics(width, height, JAVA2D);/// @note/// 创建一个额外的pgraphics对象在透明背景上渲染size(400, 400, P2D);alphaG = createGraphics(width, height, P2D);/// 背景在 png 文…

电脑上win是哪个键_电脑上使用时间管理软件哪个好?

论时间管理的重要性&#xff0c;有些人会认为日常工作/生活中根本用不到时间管理软件&#xff0c;毕竟很多工作上的事情都是一连串的&#xff0c;做完这一项紧接着做另外一项就好了&#xff1b;可是有些人则不这么认为&#xff0c;一款好用的时间管理软件可以在工作/生活方面起…

《数据结构》一般线性表的合并

一般线性表的合并 算法思想&#xff1a; 遍历表A和表B&#xff0c;查看B的每一个元素是否在A中&#xff0c;若不在&#xff0c;将B的该元素插入到A的表尾&#xff0c;A表的表长1。 算法的时间复杂度和A、B的长度有关&#xff0c;O&#xff08;m*n&#xff09;. //合并 void …

ProcessingJoy —— 色调映射(Tone Mapping)【JAVA】【GLSL】

效果图 使用未插值的颜色表 使用插值的颜色表 代码和注释 ps: 本例所使用的颜色查找表是一维的,如效果图左上角(下面那个彩色小方块)所示 主流程 main.pde // @note 颜色表 color COL[][] = {{#003049, #d62828, #f77f00, #fcbf49, #eae2b7},{#F94144, #F3722C, #F8…

笔记本电脑键盘切换_戴尔Latitude7390不仅可以用作笔记本电脑

在戴尔Latitude 7390拥有一台笔记本电脑2所每个人需要的东西&#xff1a;便携性和工作效率。Latitude 7390不仅可以用作笔记本电脑&#xff0c;还可以对折并用作13英寸平板电脑。我们有一个难得的机会站起来&#xff0c;这就是我们的想法。设计施工这款笔记本电脑时尚纤薄&…

【Unity】13.3 Realtime GI示例

分类&#xff1a;Unity、C#、VS2015 创建日期&#xff1a;2016-04-19 一、简介 使用简单示例而不是使用实际示例的好处是能让你快速理解光照贴图和光影效果相关的概念和基本设置办法&#xff0c;这样可避免实际复杂场景中其他因素的干扰。一旦你熟悉了这些基本用法&#xff0c;…

Servelet基础

写一个html文件&#xff0c;做form调用 <html><head><title>Java Servelets Sample - Properties</title></haed> <body><form METHOD"POST" ACTION"/myapp/Properties" ENCTYPE"x-www-form-encoded">…

ProcessingJoy —— 牛转乾坤 + 疫情退散【JAVA】

效果图 代码和注释 主流程 main.pde PFont font; ArrayList<TextCircle> t = new ArrayList<TextCircle>(); ///< 存储圆环字符串 float MIN_RADIUS = 40; ///< 最小圆环半径, 30 String []STRS = {"牛轉乾坤&qu…

Redis源码解析2 - Dict结构

DICT数据结构 &#xff08;转载请注明出处&#xff1a;http://www.cnblogs.com/curve/archive/2012/09/18/2685076.html&#xff09; Dict其实就是一个hash表&#xff0c;但在Redis中&#xff0c;已经存在一种叫“Hash”的数据结构&#xff0c;所以&#xff0c;就把Hash表改名成…