我正在启动另一个应用程序并设置它的主要HWND位置和大小。我使用STARTUPINFO标志来指定窗口尺寸,但是看起来只有当新进程在其CreateWindow()函数中使用CW_USEDEFAULT时,才会遵循这些尺寸。
在STARTUPINFO中是否有一个标志/设置可以始终设置新流程的HWND维度?
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
si.dwX = x;
si.dwY = y;
si.dwXSize = w;
si.dwYSize = h;
// any flags I can set to give the STARTUPINFO dimensions priority?
si.dwFlags = ??
CreateProcess(_T("C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe"), _T(""),
NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL,
NULL, &si, &pi);发布于 2016-07-15 12:31:42
在STARTUPINFO中是否有一个标志/设置将始终设置新工艺的HWND尺寸?
不是的。衍生的进程可以完全控制其UI。它选择是否使用默认值。您在STARTUPINFO中指定的内容仅为默认值。
我知道另一个解决方案,那就是找到进程main HWND
SetWindowPos()
如果你想强制标注尺寸,是的。
涉及枚举所有窗口以找到正确的窗口,并且一些应用程序需要一段时间才能启动,因此在我调用EnumWindows()时窗口是活动的。
尝试先调用WaitForInputIdle() (caveat #1,caveat #2)。
或者,使用SetWinEventHook()监视窗口创建,直到您看到感兴趣的窗口。
相关:How to determine when spawned process is ready? (Using CreateProcess() and FindWindow())
https://stackoverflow.com/questions/38387798
复制相似问题