admin管理员组文章数量:1564176
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_OBJECT
public:
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/s/1jIPKwnG
版权声明:本文标题:[Qt]在Qt c++中调用迅雷openSDK,使用迅雷批量下载文件(demo程序) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1727487430a1117271.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论