gpt4 book ai didi

c++ - 强制显示以 SW_HIDE 作为 STARTUPINFO 启动的进程的窗口?

转载 作者:行者123 更新时间:2023-11-28 01:53:41 28 4
gpt4 key购买 nike

我想从 DLL 创建/显示窗口,但是这个 DLL 是从使用 STARTUPINFOW::wShowWindow 创建的进程加载的之前设置为 SW_HIDE。不幸的是,我无法更改创建流程的任何代码:

STARTUPINFOW startupInfo;
memset(&startupInfo, 0, sizeof(startupInfo));
startupInfo.cb = sizeof(startupInfo);
startupInfo.dwFlags = STARTF_USESHOWWINDOW;
startupInfo.wShowWindow = SW_HIDE;
PROCESS_INFORMATION processInfo;
memset(&processInfo, 0, sizeof(processInfo));

CreateProcessW(NULL, getCommand(), NULL, NULL, FALSE, 0, NULL, getWorkingDir(), &startupInfo, &processInfo);

我通常使用 Win32 api 创建窗口:

ZeroMemory(&wc, sizeof(WNDCLASSEX));
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WindowProcRouter;
wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.lpszClassName = L"Window";
RegisterClassEx(&wc);
DWORD dwStyle = WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU;
RECT WindowRect;
WindowRect.left = (long)0;
WindowRect.right = (long)width;
WindowRect.top = (long)0;
WindowRect.bottom = (long)height;
AdjustWindowRect(&WindowRect, dwStyle, FALSE);
HWND handle = CreateWindowEx(0,
wc.lpszClassName,
L"Title",
dwStyle,
0, 0,
WindowRect.right - WindowRect.left,
WindowRect.bottom - WindowRect.top,
nullptr,
nullptr,
wc.hInstance,
(void*) this);
ShowWindow(handle, SW_SHOW);
SetFocus(handle);

但是窗口没有显示;仅当我手动启动父进程时(因此永远不会执行第一个代码片段中的 STARTUPINFO 代码)。我知道的唯一解决方案是更改创建进程的代码或在我的 DLL 中创建一个全新的进程(没有 SW_HIDE 作为 STARTUPINFO)。

所以我想知道是否有任何方法可以强制显示窗口,即使父进程正在使用 SW_HIDE 作为 STARTUPINFO::wShowWindow

最佳答案

STARTUPINFO 值仅在进程第一次调用 ShowWindow() 时使用,因此如果您第二次调用它,您的窗口将显示。

关于c++ - 强制显示以 SW_HIDE 作为 STARTUPINFO 启动的进程的窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41993061/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com