强制将以SW_HIDE启动的进程中的窗口显示为STARTUPINFO
Force to show a window from a process started with SW_HIDE as STARTUPINFO?
我想从DLL创建/显示一个窗口,但这个DLL是从一个进程加载的,该进程是在STARTUPINOW::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()
时使用,因此如果您第二次调用它,则会显示您的窗口。
相关文章:
- 创建进程 API 失败,在窗口 122 上出现错误代码 10
- 通过 pid 窗口判断进程是否存在
- C++ 窗口本地系统模拟在子进程中失败
- 如何在窗口上设置使用 CreateProcess 创建的新进程的主线程的堆栈大小?
- 有没有办法为使用 Boost 生成的进程创建新的控制台窗口
- 提升 1.58.0 窗口进程.h 错误
- 在单个进程中使Qt顶级窗口被其他非Qt窗口"owned"
- 查找窗口找不到进程
- 将窗口句柄从一个进程使用到另一个进程(插件 vst 音频)
- Win32/Gdigrab - 如何将另一个进程窗口设置为无边框
- 强制将以SW_HIDE启动的进程中的窗口显示为STARTUPINFO
- 有没有办法接收有关在窗口中启动的进程的事件
- 窗口 :创建仅具有对我的进程的权限的目录 (C++)
- 如何在没有窗口类的情况下编写QT系统托盘应用程序,并将其与另一个进程集成
- 如何获取具有可见窗口的任何进程的名称 - WinAPI?
- C++ Windows CreateChildProcess - 隐藏/不显示子进程的控制台窗口
- 如何使用在窗口中使用C++从CreateToolhelp32Snapshot获取64/32位进程详细信息和进程信息
- 如何在列表框窗口进程中捕获VK_ESCAPE
- 将 CreateProcess() 的 stdout 重定向到管道并在另一个进程 c++ 窗口中读取它
- C + + Kill进程窗口标题