[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

相关文章

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

C++变换迭代器使用方法小结

《C++变换迭代器使用方法小结》本文主要介绍了C++变换迭代器使用方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、源码2、代码解析代码解析:transform_iterator1. transform_iterat

详解C++中类的大小决定因数

《详解C++中类的大小决定因数》类的大小受多个因素影响,主要包括成员变量、对齐方式、继承关系、虚函数表等,下面就来介绍一下,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 非静态数据成员示例:2. 数据对齐(Padding)示例:3. 虚函数(vtable 指针)示例:4. 继承普通继承虚继承5.