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