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