生活随笔
收集整理的這篇文章主要介紹了
Qt:Qt实现网页自动刷新工具
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
使用Qt實(shí)現(xiàn)網(wǎng)頁(yè)刷新工具
前言
最近在看一本《C++黑客編程揭秘和防范》 ,剛開始學(xué),感覺書還不錯(cuò),有講一些windows API,不過里面的工具都是使用VC++寫的,界面部分使用的mfc的一些API,感覺太不友好來,筆者 想的是 界面部分當(dāng)然應(yīng)該可以用,當(dāng)下桌面端最流行的 Qt 來寫呀,windows api相關(guān)的可以直接 引入相關(guān)的頭文件即可。
說的容易,做的難,以前沒學(xué)過windows api,使用FindWindow獲取窗口句柄 一直獲取不到,這個(gè)問題 卡了我一周吧。應(yīng)該是如下幾個(gè)問題導(dǎo)致的:
在MSDN找到的是FindWindowA函數(shù) 引用的Winuser.h頭文件,應(yīng)該引入Windows.h使用FindWindow函數(shù)網(wǎng)頁(yè)窗口沒有放到最前面? 有可能
筆者想的是,用Qt結(jié)合window API來實(shí)現(xiàn) 書中所實(shí)現(xiàn)的工具,因?yàn)閝t寫界面太方便了,qt - 你值得擁有!
代碼
這里首先要知道刷新網(wǎng)頁(yè)窗口的標(biāo)題,使用spy++工具進(jìn)行獲取(裝好了VC++就有了)。自行百度哈。
Qt呢?qt不會(huì)?學(xué)呀,這么好用的工具,很好學(xué)的。
qt代碼如下,完整工程,請(qǐng)下載 示例demo,或者git地址下載有問題可留言喲。
#include "widget.h"
#include "ui_widget.h"
#include "Windows.h"
#include <QDebug>
#include <QThread>
#include <QTimer>
#include <QRegExp>
#include <QRegExpValidator>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);myTimer = new QTimer(this);//刷新按鈕 信號(hào)槽connect(ui->beginButton,&QPushButton::clicked,this,&Widget::beginRefresh);//停止按鈕 信號(hào)槽connect(ui->stopButton,&QPushButton::clicked,this,&Widget::stopRefresh);
}void Widget::beginRefresh(){QString winTitle = ui->htmlWinTitle->text();qDebug() << winTitle;char* ch = winTitle.toUtf8().data();//我打開的這個(gè)網(wǎng)頁(yè):https://blog.csdn.net/qq_29542611//刷新網(wǎng)頁(yè)窗口的標(biāo)題:【無欲則剛】30歲回農(nóng)村 - CSDN博客 - 2345加速瀏覽器 9.5qDebug() << ch;//這里必須轉(zhuǎn)換!不轉(zhuǎn)換會(huì)報(bào)錯(cuò): cannot convert 'char*' to 'LPCWSTR {aka const wchar_t*}' for argument '2' to 'HWND__* FindWindowW(LPCWSTR, LPCWSTR)'LPCWSTR str = (LPCWSTR)ch;//需要Windows.h頭文件HWND win = ::FindWindow(NULL, str);if(win != NULL){qDebug() << "找到窗口:"+winTitle;}else{qDebug() << "沒有找到窗口!!!";return;}if(myTimer->timerId()!=-1){//定時(shí)器在運(yùn)行,先關(guān)掉myTimer->stop();}QString intervalStr = ui->lineEdit->text();QRegExp reg("[1-9]");if( reg.exactMatch(intervalStr)){int interval = intervalStr.toInt();//每interval秒刷新一次網(wǎng)頁(yè)qDebug() << "間隔時(shí)間"<< interval;myTimer->start(interval*1000);}else{qDebug() << "時(shí)間間隔請(qǐng)輸入1-9的數(shù)字";return;}refresh(win);//設(shè)置定時(shí)器connect(myTimer,&QTimer::timeout,[=](){qDebug() << "執(zhí)行定時(shí)器";refresh(win);});}
void Widget::stopRefresh(){myTimer->stop();
}void Widget::refresh(HWND win){//將指定的窗口設(shè)置到最前面并處于激活狀態(tài),不然當(dāng)沒有在最前面是不會(huì)刷新的。SetForegroundWindow(win);PostMessage(win, WM_KEYDOWN, VK_F5,1);Sleep(50);PostMessage(win, WM_KEYUP, VK_F5,1);
}Widget::~Widget()
{delete ui;
}
界面
新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!
總結(jié)
以上是生活随笔為你收集整理的Qt:Qt实现网页自动刷新工具的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。