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

2023-12-25 10:20

本文主要是介绍[Qt]在Qt c++中调用迅雷openSDK,使用迅雷批量下载文件(demo程序),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

这篇关于[Qt]在Qt c++中调用迅雷openSDK,使用迅雷批量下载文件(demo程序)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/535167

相关文章

Spring Boot整合Redis注解实现增删改查功能(Redis注解使用)

《SpringBoot整合Redis注解实现增删改查功能(Redis注解使用)》文章介绍了如何使用SpringBoot整合Redis注解实现增删改查功能,包括配置、实体类、Repository、Se... 目录配置Redis连接定义实体类创建Repository接口增删改查操作示例插入数据查询数据删除数据更

使用python生成固定格式序号的方法详解

《使用python生成固定格式序号的方法详解》这篇文章主要为大家详细介绍了如何使用python生成固定格式序号,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录生成结果验证完整生成代码扩展说明1. 保存到文本文件2. 转换为jsON格式3. 处理特殊序号格式(如带圈数字)4

Java使用Swing生成一个最大公约数计算器

《Java使用Swing生成一个最大公约数计算器》这篇文章主要为大家详细介绍了Java使用Swing生成一个最大公约数计算器的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下... 目录第一步:利用欧几里得算法计算最大公约数欧几里得算法的证明情形 1:b=0情形 2:b>0完成相关代码第二步:加

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置