吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 343|回复: 1
收起左侧

[求助] c++中使用dll侧载如何隐藏主窗体

[复制链接]
MrFooL 发表于 2024-5-2 13:16
求助各位大佬,目前需求是使用dll侧载,当主程序1.exe加载1.dll时,dll使用ShowWindow(Hwnd, SW_HIDE);隐藏窗体。ps:1.exe没有源码,不能使用参数传递。
目前问题是dll无法获取到主窗体的句柄,加载dll时窗体还未完成加载(Hwnd为空),导致隐藏失败。
[C++] 纯文本查看 复制代码
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved)
{
    if (dwReason == DLL_PROCESS_ATTACH)
    {
        HWND hWnd = GetConsoleWindow();
        if (hWnd != NULL) {
            ShowWindow(hWnd, SW_HIDE);
        }
    }
}




然后尝试使用死循环的方式不断查找窗体,直到找到符合条件的窗体句柄就隐藏。(代码写在单独的程序里测试没问题,打开指定窗口就会被隐藏)
但如果写在dll里,这样会导致主程序死锁。。窗体压根就没加载就没办法执行后面的代码了。
[C++] 纯文本查看 复制代码
struct window
{
    HWND hd;
    wstring caption;
};
int wnum = 0;
window windows[1001]{};
BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
    TCHAR Caption[200]{};
    GetWindowText(hWnd, Caption, 200);
    switch (lParam)
    {
    case 0:
    case 3:
        if (IsWindowVisible(hWnd) && (GetWindowLong(hWnd, GWL_EXSTYLE) & WS_EX_TOOLWINDOW) != WS_EX_TOOLWINDOW && GetWindowLong(hWnd, GWLP_HWNDPARENT) == 0)
            break;
        else
            return TRUE;
    case 1:
        if (wcscmp(Caption, TEXT("")) == 0)
            return TRUE;
        break;
    case 2:
        break;
    }
    ++wnum;
    if (wnum == 1001)
    {
        return FALSE;
    }
    windows[wnum].caption = Caption;
    windows[wnum].hd = hWnd;
    return TRUE;
}
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved)
{
    if (dwReason == DLL_PROCESS_ATTACH)
    {
DisableThreadLibraryCalls(hModule);
 bool isShow = TRUE;
        while (isShow)
        {
            wnum = 0;
            EnumWindows(EnumWindowsProc, 0);
            for (int i = 1; i <= wnum; ++i)
            {
                HWND WindowHwnd = NULL;
                if (windows[i].caption == L"testName")//找到指定窗体名
                {
                    WindowHwnd = windows[i].hd;
                    ShowWindow(WindowHwnd, SW_HIDE);//隐藏
                    
                    isShow = FALSE;
                    break;
                }
            }
        }

}
}



求助各位大佬,应该如何修改代码才能达到我想要的效果

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

爱飞的猫 发表于 2024-5-3 17:45
hook 建立窗口的函数(CreateWindowExA/W 等,需要分析程序代码看它用了哪个),建立窗口时更改传递的参数或建立后拿 hwid 让其隐藏。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 14:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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