C++ 强制显示以SW_HIDE as STARTUPINFO启动的流程中的窗口?

C++ 强制显示以SW_HIDE as STARTUPINFO启动的流程中的窗口?,c++,windows,winapi,C++,Windows,Winapi,我想从DLL中创建/显示一个窗口,但此DLL是从之前设置为SW\u HIDE的进程中加载的。不幸的是,我无法更改创建流程的任何代码: STARTUPINFOW startupInfo; memset(&startupInfo, 0, sizeof(startupInfo)); startupInfo.cb = sizeof(startupInfo); startupInfo.dwFlags = STARTF_USESHOWWINDOW; startupInfo.wShowWindow =

我想从DLL中创建/显示一个窗口,但此DLL是从之前设置为
SW\u 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
as
STARTUPINFO


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

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

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

值仅在进程第一次调用
ShowWindow()
时使用,所以只要叫它两次。@JonathanPotter谢谢你,我在文档中忽略了这一点!如果你把这个复制成一个答案,我可以接受!
STARTUPINFO
值仅在进程第一次调用
ShowWindow()
时使用,所以只需调用两次即可。@JonathanPotter谢谢,我在文档中忽略了这一点!如果你把这个复制成一个答案,我可以接受!