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

使用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地址下载有问题可留言哟。

#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.5
    qDebug() << 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;
}


界面

在这里插入图片描述

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt是一种跨平台的C++开发框架,它提供了丰富的图形用户界面、输入/输出、数据库操作等功能,使得开发者可以轻松地创建各种类型的应用程序。 拼图游戏是一种常见的休闲游戏,在游戏中玩家需要将一幅图片或者一个图案分割成若干小块,并按照一定规则进行重新排列,最终还原原始的图案。 使用Qt开发拼图游戏可以从以下几个方面考虑。 首先,可以利用Qt提供的图形用户界面工具来绘制游戏界面。可以使用Qt的绘图功能将图片或者图案绘制在窗口上,并将其分割成一系列小块。玩家可以通过鼠标操作选择和移动这些小块,从而进行拼图操作。同时,可以利用Qt提供的布局管理器来自动调整界面的布局,适应不同的屏幕分辨率和窗口大小。 其次,可以利用Qt的信号和槽机制实现游戏的逻辑。当玩家点击某个小块时,可以发出相应的信号,由相应的槽函数来处理。槽函数可以根据游戏规则判断是否可以移动某个小块,并进行相应的处理,如交换位置、更新分数等。 此外,可以利用Qt的定时器功能来实现游戏的计时和倒计时功能。可以在游戏开始时启动一个定时器,并在每秒钟刷新界面上显示的计时器数值,以及检查游戏是否超时或者达到胜利条件。 最后,在游戏中可以使用Qt的音频播放功能,添加背景音乐和音效,增强游戏的娱乐性和交互性。 总之,使用Qt开发拼图游戏可以借助其丰富的图形用户界面和功能库,轻松实现游戏的绘制、交互、逻辑等功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值