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.com/s/1jIPKwnG
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。