QT实现植物大战僵尸中文版工具代码

简介: QT实现植物大战僵尸中文版工具代码

.h文件

/*
 * @Author: Stylle
 * @Date: 2020-07-19 21:21:46
 * @LastEditors: Stylle
 * @LastEditTime: 2020-07-22 10:43:15
 * @FilePath: \tool-mastar\stylle_toolV1.8\tool_pvz.h
 */
#ifndef TOOL_PVZ_H
#define TOOL_PVZ_H
#include <QWidget>
//定时器
#include <QTimer>
//消息弹窗
#include <QMessageBox>
//跳转网页
#include <QDesktopServices>
#include <QUrl>
//window api调用
#include <windows.h>
namespace Ui
{
    class tool_pvz;
}
class tool_pvz : public QWidget
{
    Q_OBJECT
public:
    explicit tool_pvz(QWidget *parent = 0);
    ~tool_pvz();
    void printCs();
    void System_Init();
    void openBlog();
    void modifyGold();
    void modifySunshine();
    void NoCd_on(bool);
    void NoCd_stop(bool);
    void Auto_on(bool);
    void Auto_stop(bool);
private slots:
    void modifyNoCd();
    void modifyAuto();
    //    void on_btn_home_clicked();
private:
    QTimer *timer = new QTimer(this);
    QTimer *timer1 = new QTimer(this);
    Ui::tool_pvz *ui;
};
#endif // TOOL_PVZ_H

.c文件

#include "tool_pvz.h"
#include "ui_tool_pvz.h"
tool_pvz::tool_pvz(QWidget *parent) : QWidget(parent),
                                      ui(new Ui::tool_pvz)
{
    ui->setupUi(this);
    System_Init();
}
tool_pvz::~tool_pvz()
{
    delete timer;
    delete timer1;
    delete ui;
}
/***子函数代码区****/
void tool_pvz::System_Init()
{
    // 禁止最大化按钮
    setWindowFlags(windowFlags() & ~Qt::WindowMaximizeButtonHint);
    // 禁止拖动窗口大小
    setFixedSize(this->width(), this->height());
    //绑定按钮事件
    connect(ui->btn_openUrl, &QPushButton::clicked, this, &tool_pvz::openBlog);
    connect(ui->PrintCs, &QPushButton::clicked, this, &tool_pvz::printCs);
    connect(ui->btn_gold, &QPushButton::clicked, this, &tool_pvz::modifyGold);
    connect(ui->btn_sun, &QPushButton::clicked, this, &tool_pvz::modifySunshine);
    //冷却取消  关闭冷却按钮
    connect(ui->btn_auto_off, &QPushButton::clicked, this, &tool_pvz::NoCd_stop);
    //开启冷却  恢复冷却
    connect(ui->btn_auto_on, &QPushButton::clicked, this, &tool_pvz::NoCd_on);
    //定时器
    connect(timer, SIGNAL(timeout()), this, SLOT(modifyNoCd()));
    //自动收集资源  自动收集按钮
    connect(ui->btn_sungon, &QPushButton::clicked, this, &tool_pvz::Auto_on);
    //取消自动收集资源  取消收集按钮
    connect(ui->btn_sungoff, &QPushButton::clicked, this, &tool_pvz::Auto_stop);
    //定时器1
    connect(timer1, SIGNAL(timeout()), this, SLOT(modifyAuto()));
}
void tool_pvz::printCs()
{
    long tmp = 0;
    do
    {
        QMessageBox box(QMessageBox::NoIcon, "你就说", "   刘露是不是渣男?");
        box.setStandardButtons(QMessageBox::Ok | QMessageBox::No);
        box.setButtonText(QMessageBox::Ok, QString("必须是"));
        box.setButtonText(QMessageBox::No, QString("不是?"));
        tmp = box.exec();
    } while (QMessageBox::No == tmp);
}
/*   下载游戏  */
void tool_pvz::openBlog()
{
    QDesktopServices::openUrl(QUrl("https://wws.lanzous.com/ifeDLemqjqh"));
}
/*  修改金币类  */
void tool_pvz::modifyGold()
{
    //检测游戏是否在运行
    HWND hGameWnd = FindWindow(L"MainWindow", L"植物大战僵尸中文版");
    if (hGameWnd == NULL)
        ui->hGameWnd->setText("未找到游戏");
    else
        ui->hGameWnd->setText("已找到游戏");
    DWORD dwPID = 0;
    //根据窗口句柄获取进程IPD
    GetWindowThreadProcessId(hGameWnd, &dwPID);
    //根据PID获取进程句柄
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);
    //从指定进程内存区去读取数据:读取进程,读取的基地址,接受进程地址数据,读取进程字节大小,实际读取字节数
    DWORD dwGoldBaseAddress = 0x6A9EC0;
    DWORD dwGoldAddressValue = 0;
    DWORD dwSize = 0;
    ReadProcessMemory(hProcess, (void *)dwGoldBaseAddress, &dwGoldAddressValue, sizeof(DWORD), &dwSize);
    //获取一级偏移地址
    DWORD dwGoldoffsetFirst = 0x82c;
    DWORD dwGoldoffsetValue = 0;
    ReadProcessMemory(hProcess, (void *)(dwGoldoffsetFirst + dwGoldAddressValue), &dwGoldoffsetValue, sizeof(DWORD), &dwSize);
    //获取二级偏移地址
    DWORD dwGoldoffsetsecond = 0x28;
    DWORD dwGold = 0;
    ReadProcessMemory(hProcess, (void *)(dwGoldoffsetValue + dwGoldoffsetsecond), &dwGold, sizeof(DWORD), &dwSize);
    DWORD addProcess = dwGoldoffsetValue + dwGoldoffsetsecond;
    DWORD tem = ui->edit_gold->text().toInt();
    WriteProcessMemory(hProcess, (void *)addProcess, &tem, sizeof(DWORD), &dwSize);
    //释放进程
    CloseHandle(hProcess);
}
/*  修改阳光类  */
void tool_pvz::modifySunshine()
{
    //检测游戏是否在运行
    HWND hGameWnd = FindWindow(L"MainWindow", L"植物大战僵尸中文版");
    if (hGameWnd == NULL)
        ui->hGameWnd->setText("未找到游戏");
    else
        ui->hGameWnd->setText("已找到游戏");
    DWORD dwPID = 0;
    //根据窗口句柄获取进程IPD
    GetWindowThreadProcessId(hGameWnd, &dwPID);
    //根据PID获取进程句柄
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);
    //从指定进程内存区去读取数据:读取进程,读取的基地址,接受进程地址数据,读取进程字节大小,实际读取字节数
    DWORD dwSunshineBaseAddress = 0x6A9EC0;
    DWORD dwSunshineAddressValue = 0;
    DWORD dwSize = 0;
    ReadProcessMemory(hProcess, (void *)dwSunshineBaseAddress, &dwSunshineAddressValue, sizeof(DWORD), &dwSize);
    //获取一级偏移地址
    DWORD dwSunshineoffsetFirst = 0x768;
    DWORD dwSunshineoffsetValue = 0;
    ReadProcessMemory(hProcess, (void *)(dwSunshineoffsetFirst + dwSunshineAddressValue), &dwSunshineoffsetValue, sizeof(DWORD), &dwSize);
    //获取二级偏移地址
    DWORD dwSunshineoffsetsecond = 0x5560;
    DWORD dwSunshine = 0;
    ReadProcessMemory(hProcess, (void *)(dwSunshineoffsetValue + dwSunshineoffsetsecond), &dwSunshine, sizeof(DWORD), &dwSize);
    DWORD addProcess = dwSunshineoffsetValue + dwSunshineoffsetsecond;
    DWORD tem = ui->edit_sun->text().toInt();
    WriteProcessMemory(hProcess, (void *)addProcess, &tem, sizeof(DWORD), &dwSize);
    //释放进程
    CloseHandle(hProcess);
}
/*  无CD类  */
void tool_pvz::modifyNoCd()
{
    //检测游戏是否在运行
    HWND hGameWnd = FindWindow(L"MainWindow", L"植物大战僵尸中文版");
    if (hGameWnd == NULL)
        ui->hGameWnd->setText("未找到游戏");
    else
        ui->hGameWnd->setText("已找到游戏");
    DWORD dwPID = 0;
    //根据窗口句柄获取进程IPD
    GetWindowThreadProcessId(hGameWnd, &dwPID);
    //根据PID获取进程句柄
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);
    //从指定进程内存区去读取数据:读取进程,读取的基地址,接受进程地址数据,读取进程字节大小,实际读取字节数
    DWORD dwBaseaddress = 0x6A9EC0;
    DWORD dwAddressValue = 0;
    int t = 1;
    ReadProcessMemory(hProcess, (LPVOID)dwBaseaddress, &dwAddressValue, 4, 0);
    DWORD offset1;
    ReadProcessMemory(hProcess, (LPVOID)(dwAddressValue + 0x768), &dwAddressValue, 4, 0);
    ReadProcessMemory(hProcess, (LPVOID)(dwAddressValue + 0x144), &dwAddressValue, 4, 0);
    int len = 10;
    for (int i = 0; i < len; i++)
    {
        offset1 = i * 0x50 + 0x70;
        WriteProcessMemory(hProcess, (LPVOID)(dwAddressValue + offset1), &t, 4, 0);
    }
    //释放进程
    CloseHandle(hProcess);
}
/*  自动收集资源类  */
void tool_pvz::modifyAuto()
{
    //检测游戏是否在运行
    HWND hGameWnd = FindWindow(L"MainWindow", L"植物大战僵尸中文版");
    if (hGameWnd == NULL)
        ui->hGameWnd->setText("未找到游戏");
    else
        ui->hGameWnd->setText("已找到游戏");
    DWORD dwPID = 0;
    //根据窗口句柄获取进程IPD
    GetWindowThreadProcessId(hGameWnd, &dwPID);
    //根据PID获取进程句柄
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);
    //从指定进程内存区去读取数据:读取进程,读取的基地址,接受进程地址数据,读取进程字节大小,实际读取字节数
    DWORD dwBaseaddress = 0x006A9EC0;
    DWORD dwAddressValue = 0;
    int t = 1;
    ReadProcessMemory(hProcess, (LPVOID)dwBaseaddress, &dwAddressValue, 4, 0);
    ReadProcessMemory(hProcess, (LPVOID)(dwAddressValue + 0x00000768), &dwAddressValue, 4, 0);
    ReadProcessMemory(hProcess, (LPVOID)(dwAddressValue + 0xE4), &dwAddressValue, 4, 0);
    int Numb = 50;
    for (int i = 0; i < Numb; i++)
    {
        DWORD object = dwAddressValue + 0x50 + i * 0xD8;
        DWORD objectType = dwAddressValue + 0x58 + i * 0xD8;
        DWORD Value1 = 0;
        DWORD Value2 = 0;
        ReadProcessMemory(hProcess, (LPVOID)object, &Value1, 4, 0);
        ReadProcessMemory(hProcess, (LPVOID)objectType, &Value2, 4, 0);
        if (Value1 == 0 && Value2 < 7)
        {
            WriteProcessMemory(hProcess, (LPVOID)object, &t, 4, 0);
        }
    }
    //释放进程
    CloseHandle(hProcess);
}
//无CD函数
void tool_pvz::NoCd_on(bool)
{
    //按钮可用控制
    int ms = 500;
    timer->start(ms);
    ui->btn_auto_on->setEnabled(false);
    ui->btn_auto_off->setEnabled(true);
}
void tool_pvz::NoCd_stop(bool)
{
    timer->stop();
    //按钮可用控制
    ui->btn_auto_off->setEnabled(false);
    ui->btn_auto_on->setEnabled(true);
}
//自动收集函数
void tool_pvz::Auto_on(bool)
{
    //按钮可用控制
    int ms = 500;
    timer1->start(ms);
    ui->btn_sungon->setEnabled(false);
    ui->btn_sungoff->setEnabled(true);
}
void tool_pvz::Auto_stop(bool)
{
    timer1->stop();
    //按钮可用控制
    ui->btn_sungoff->setEnabled(false);
    ui->btn_sungon->setEnabled(true);
}
/***子函数代码结束****/


相关文章
|
4月前
|
IDE 数据可视化 开发工具
C++ Qt开发:Qt的安装与配置
Qt是一种C++编程框架,用于构建图形用户界面(GUI)应用程序和嵌入式系统。Qt由Qt公司(前身为Nokia)开发,提供了一套跨平台的工具和类库,使开发者能够轻松地创建高效、美观、可扩展的应用程序。其被广泛用于开发桌面应用程序、嵌入式系统、移动应用程序等。无论是初学者还是经验丰富的开发者,Qt都为构建高质量、可维护的应用程序提供了丰富的工具和支持。
75 0
C++ Qt开发:Qt的安装与配置
|
9月前
|
XML 编译器 数据库
QT --- VS嵌入QT开发环境搭建
QT --- VS嵌入QT开发环境搭建
139 0
|
10月前
|
Python
Python Qt GUI设计:做一款串口调试助手(实战篇—1)
Python Qt GUI设计系列博文终于到了实战篇,本篇博文将贯穿之前的基础知识点实现一款串口调试助手。
|
10月前
|
前端开发 索引 Python
Tkinter模块GUI图形化编程实战(八)——中国象棋(含超详解及完整源码、完整程序免费下载链接)
Tkinter模块GUI图形化编程实战(八)——中国象棋(含超详解及完整源码、完整程序免费下载链接)
126 0
【QT】历时两个月,用QT实现超级玛丽,谁说QT不能写游戏?【附源码】
【QT】历时两个月,用QT实现超级玛丽,谁说QT不能写游戏?【附源码】
easyX配套VC++(easyx安装及vc/vs安装)一招让你的代码黑框更多彩
/x,y用具体数值表示例如initgraph(500,500);就是初始化一个500*500像素大小的画布第一个数值为宽,第二个数值为高,第三个值为窗口样式值EW_DBLCLKS //在绘图窗口中支持鼠标双击事件EW_NOCLOSE //禁用绘图窗口的关闭按钮EW_NOMINIMIZE //禁用绘图窗口的最小化按钮。
|
Windows
初学者宿主软件FL Studio20.9中文版水果工具
现在的编曲界,鱼龙混杂,很多垃圾软件都来滥竽充数,能入流的编曲软件真的是屈指可数。而编曲业的缺口却又如此之大,所以各类货色都想入行分一杯羹。然而没有实力注定就没有市场而FL Studio又是一款非常著名,实力超群的编曲软件。
133 0
Qt实用技巧:Qt从QtCreator更换为VS开发Qt所需要注意的坑
Qt实用技巧:Qt从QtCreator更换为VS开发Qt所需要注意的坑
Qt实用技巧:Qt从QtCreator更换为VS开发Qt所需要注意的坑
朱星烨教你制作拜年python软件——GUI妙用
2022年虎年,制作拜年软件,使用python技术的GUI,能够和收到祝福的朋友互动功能,设计软件后的美工调整
朱星烨教你制作拜年python软件——GUI妙用
Qt 3D Studio-01-初遇、倾心(哈哈)
这个世界上最美好的事物就是你不经意的回眸一笑,而我恰恰看到,从此对你一见倾心。就像你不经意的点赞,我却开心的不得了
155 0
Qt 3D Studio-01-初遇、倾心(哈哈)

热门文章

最新文章

相关实验场景

更多