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