Qt:Qt实现网页自动刷新工具

柔光的暖阳◎ 2022-05-13 14:58 312阅读 0赞

使用Qt实现网页刷新工具

前言

最近在看一本《C++黑客编程揭秘和防范》 ,刚开始学,感觉书还不错,有讲一些windows API,不过里面的工具都是使用VC++写的,界面部分使用的mfc的一些API,感觉太不友好来,笔者 想的是 界面部分当然应该可以用,当下桌面端最流行的 Qt 来写呀,windows api相关的可以直接 引入相关的头文件即可。
说的容易,做的难,以前没学过windows api,使用FindWindow获取窗口句柄 一直获取不到,这个问题 卡了我一周吧。应该是如下几个问题导致的:

  1. 在MSDN找到的是FindWindowA函数 引用的Winuser.h头文件,应该引入Windows.h使用FindWindow函数
  2. 网页窗口没有放到最前面? 有可能

笔者想的是,用Qt结合window API来实现 书中所实现的工具,因为qt写界面太方便了,qt - 你值得拥有!

代码

这里首先要知道刷新网页窗口的标题,使用spy++工具进行获取(装好了VC++就有了)。自行百度哈。

Qt呢?qt不会?学呀,这么好用的工具,很好学的。
qt代码如下,完整工程,请下载 示例demo,或者git地址下载有问题可留言哟。

  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. #include "Windows.h"
  4. #include <QDebug>
  5. #include <QThread>
  6. #include <QTimer>
  7. #include <QRegExp>
  8. #include <QRegExpValidator>
  9. Widget::Widget(QWidget *parent) :
  10. QWidget(parent),
  11. ui(new Ui::Widget)
  12. {
  13. ui->setupUi(this);
  14. myTimer = new QTimer(this);
  15. //刷新按钮 信号槽
  16. connect(ui->beginButton,&QPushButton::clicked,this,&Widget::beginRefresh);
  17. //停止按钮 信号槽
  18. connect(ui->stopButton,&QPushButton::clicked,this,&Widget::stopRefresh);
  19. }
  20. void Widget::beginRefresh(){
  21. QString winTitle = ui->htmlWinTitle->text();
  22. qDebug() << winTitle;
  23. char* ch = winTitle.toUtf8().data();
  24. //我打开的这个网页:https://blog.csdn.net/qq_29542611
  25. //刷新网页窗口的标题:【无欲则刚】30岁回农村 - CSDN博客 - 2345加速浏览器 9.5
  26. qDebug() << ch;
  27. //这里必须转换!不转换会报错: cannot convert 'char*' to 'LPCWSTR {aka const wchar_t*}' for argument '2' to 'HWND__* FindWindowW(LPCWSTR, LPCWSTR)'
  28. LPCWSTR str = (LPCWSTR)ch;
  29. //需要Windows.h头文件
  30. HWND win = ::FindWindow(NULL, str);
  31. if(win != NULL){
  32. qDebug() << "找到窗口:"+winTitle;
  33. }else{
  34. qDebug() << "没有找到窗口!!!";
  35. return;
  36. }
  37. if(myTimer->timerId()!=-1){
  38. //定时器在运行,先关掉
  39. myTimer->stop();
  40. }
  41. QString intervalStr = ui->lineEdit->text();
  42. QRegExp reg("[1-9]");
  43. if( reg.exactMatch(intervalStr)){
  44. int interval = intervalStr.toInt();
  45. //每interval秒刷新一次网页
  46. qDebug() << "间隔时间"<< interval;
  47. myTimer->start(interval*1000);
  48. }else{
  49. qDebug() << "时间间隔请输入1-9的数字";
  50. return;
  51. }
  52. refresh(win);
  53. //设置定时器
  54. connect(myTimer,&QTimer::timeout,[=](){
  55. qDebug() << "执行定时器";
  56. refresh(win);
  57. });
  58. }
  59. void Widget::stopRefresh(){
  60. myTimer->stop();
  61. }
  62. void Widget::refresh(HWND win){
  63. //将指定的窗口设置到最前面并处于激活状态,不然当没有在最前面是不会刷新的。
  64. SetForegroundWindow(win);
  65. PostMessage(win, WM_KEYDOWN, VK_F5,1);
  66. Sleep(50);
  67. PostMessage(win, WM_KEYUP, VK_F5,1);
  68. }
  69. Widget::~Widget()
  70. {
  71. delete ui;
  72. }

界面

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,312人围观)

还没有评论,来说两句吧...

相关阅读