飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 389|回复: 5

[原创] 通过 SetWindowTextA 函数来修改控制台窗口显示的文字——万能软件标题修改教程源码

[复制链接]
  • TA的每日心情
    开心
    2024-8-8 11:24
  • 签到天数: 75 天

    [LV.6]常住居民II

    发表于 3 天前 | 显示全部楼层 |阅读模式
    本帖最后由 china365love 于 2025-4-1 11:06 编辑

    1. **功能分析与设计**:   - 要实现万能修改标题,需要提供一种灵活的方式来指定目标窗口。这可以通过窗口类名、窗口标题等多种方式。   - 修改软件按钮文字需要先找到按钮的句柄,通常可以通过窗口句柄结合 `FindWindowEx` 等函数来查找子窗口(按钮属于子窗口)。   - 移除不想要的板块,一般指的是隐藏窗口中的某个子窗口。同样需要先找到该子窗口的句柄,然后使用 `ShowWindow` 函数隐藏它。2. **优化后的代码**:
    [C++] 纯文本查看 复制代码
    #include "pch.h"
    #include <windows.h>
    #include <iostream>
    #include <tchar.h>
    
    // 全局时钟ID,用于停止时钟
    DWORD g_TimerID = NULL;
    
    // 时钟回调函数
    VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) {
        // 在这里设置目标窗口的查找条件,可根据窗口类名或窗口标题查找
        LPCTSTR targetClassName = _T("目标窗口类名");
        LPCTSTR targetWindowTitle = _T("目标窗口标题");
        HWND targetWindow = FindWindow(targetClassName, targetWindowTitle);
        if (targetWindow) {
            // 修改窗口标题
            _tprintf(_T("找到目标窗口,修改标题为:新标题\n"));
            SetWindowText(targetWindow, _T("新标题"));
    
            // 修改按钮文字
            // 假设按钮类名是 "Button",可以根据实际情况修改
            HWND buttonHandle = FindWindowEx(targetWindow, NULL, _T("Button"), NULL);
            if (buttonHandle) {
                _tprintf(_T("找到按钮,修改按钮文字为:新按钮文字\n"));
                SetWindowText(buttonHandle, _T("新按钮文字"));
            }
            else {
                _tprintf(_T("未找到按钮\n"));
            }
    
            // 移除不想要的板块(隐藏子窗口)
            // 假设要隐藏的子窗口类名是 "SomeSubclass",可以根据实际情况修改
            HWND subWindowToHide = FindWindowEx(targetWindow, NULL, _T("SomeSubclass"), NULL);
            if (subWindowToHide) {
                _tprintf(_T("找到要隐藏的子窗口,进行隐藏操作\n"));
                ShowWindow(subWindowToHide, SW_HIDE);
            }
            else {
                _tprintf(_T("未找到要隐藏的子窗口\n"));
            }
    
            // 停止定时器
            KillTimer(NULL, g_TimerID);
        }
        else {
            _tprintf(_T("未找到目标窗口\n"));
        }
    }
    
    BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
        switch (ul_reason_for_call) {
        case DLL_PROCESS_ATTACH:
            // 开启时钟,每100毫秒检查一次
            g_TimerID = SetTimer(NULL, 1, 100, (TIMERPROC)TimerProc);
            break;
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
            break;
        }
        return TRUE;
    }
    3. **代码说明**:   - **目标窗口查找**:在 `TimerProc` 函数中,通过 `FindWindow` 函数根据指定的窗口类名 `targetClassName` 和窗口标题 `targetWindowTitle` 查找目标窗口。这两个变量可以根据实际需要修改。   - **修改窗口标题**:找到目标窗口后,使用 `SetWindowText` 函数修改窗口标题为 “新标题”,可根据需求替换。   - **修改按钮文字**:通过 `FindWindowEx` 函数在目标窗口下查找类名为 “Button” 的子窗口(按钮),找到后使用 `SetWindowText` 修改按钮文字为 “新按钮文字”,可根据实际情况替换。   - **移除不想要的板块(隐藏子窗口)**:同样通过 `FindWindowEx` 查找类名为 “SomeSubclass” 的子窗口,找到后使用 `ShowWindow` 函数将其隐藏。类名可根据实际要隐藏的子窗口类名修改。   - **定时器设置**:在 `DllMain` 函数的 `DLL_PROCESS_ATTACH` 分支中,开启一个定时器,每100毫秒调用一次 `TimerProc` 函数,以尝试查找和修改目标窗口相关属性。
    [C++] 纯文本查看 复制代码
    #include "pch.h"
    #include <windows.h>
    #include <iostream>
    
    //全局时钟ID,用于停止时钟
    DWORD g_TimerID = NULL;
    int i = 0;
    
    //时钟回调函数
    VOID CALLBACK TimerProc(HWND hwnd,         // handle to window
        UINT uMsg,         // WM_TIMER message
        UINT_PTR idEvent,  // timer identifier
        DWORD dwTime       // current system time)
    )
    {
        HWND hWin = FindWindowA(NULL, "在这里修改填入原来标题");
        HWND hWin2 = FindWindowA("TkTopLevel", NULL);
    
        //修改窗口1
        if (hWin != NULL || hWin2 != NULL)
        {
            //修改标题
            SetWindowTextA(hWin, "大飞哥软件自习室—需要修改后的标题");
            SetWindowTextA(hWin2, "大飞哥软件自习室—需要修改后的标题");
            //MessageBoxA(NULL, "111", "111", MB_OK);
    
            KillTimer(NULL, g_TimerID);
        }
    
        // 获取Python控制台窗口句柄
        HWND consoleHwnd = GetConsoleWindow();
    
        if (consoleHwnd)
        {
            // 在这里修改Python控制台窗口显示的文字
            // 目前设置为“自定义控制台文字”,可根据需求替换为你想要的文字
            // 如果要删除文字显示(隐藏窗口),可使用ShowWindow(consoleHwnd, SW_HIDE);
            SetWindowTextA(consoleHwnd, "自定义控制台文字");
        }
    }
    
    extern "C" __declspec(dllexport) void Hack()
    {
        HWND hWin = FindWindowA("Window Class", NULL);
    
        SetWindowTextA(hWin, "11111111");
    }
    
    BOOL APIENTRY DllMain(HMODULE hModule,
        DWORD ul_reason_for_call,
        LPVOID lpReserved
    )
    {
        switch (ul_reason_for_call)
        {
        case DLL_PROCESS_ATTACH:
            //开启时钟
            g_TimerID = SetTimer(NULL, 1, 10, (TIMERPROC)TimerProc);
            //MessageBoxA(NULL, "111", "111", MB_OK);
            //Hack();
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
            break;
        }
        return TRUE;
    }
    请注意,实际应用中需要根据具体软件的窗口结构和类名来准确设置查找条件,确保功能正常实现,并且确保操作符合软件使用条款和相关法律法规。
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2025-1-14 13:49
  • 签到天数: 393 天

    [LV.9]以坛为家II

    发表于 3 天前 | 显示全部楼层
    PYG19周年生日快乐!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-1-14 23:10
  • 签到天数: 267 天

    [LV.8]以坛为家I

    发表于 3 天前 | 显示全部楼层
    看来表哥是对标题文字扛上了,一定要解决
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-1-14 13:49
  • 签到天数: 393 天

    [LV.9]以坛为家II

    发表于 3 天前 | 显示全部楼层
    PYG20周年生日快乐!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-1-14 07:47
  • 签到天数: 1855 天

    [LV.Master]伴坛终老

    发表于 昨天 09:50 | 显示全部楼层
    感谢楼主分享!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-1-14 07:39
  • 签到天数: 754 天

    [LV.10]以坛为家III

    发表于 5 小时前 | 显示全部楼层
    感谢发布原创作品,PYG有你更精彩!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表