2016-07-15 69 views
0

我正在啓動另一個應用程序並設置其主HWND位置和大小。我使用STARTUPINFO標誌來指定窗口尺寸,但是如果新過程在CreateWindow()函數中使用CW_USEDEFAULT,則只會遵循這些尺寸。啓動過程並始終設置過程HWND尺寸

STARTUPINFO中是否有標誌/設置將始終設置新進程HWND尺寸?我知道另一種解決方案是找到方法主要HWND和SetWindowPos(),但涉及枚舉所有窗口,找到正確的和一些應用程序需要一段時間來啓動這樣的窗口是活着我叫EnumWindows()

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); 

回答

3
時間

STARTUPINFO中是否有一個標誌/設置將始終設置新的HWND維度?

不可以。產生的進程完全控制其UI。它選擇是否使用默認值。您在STARTUPINFO中指定的內容僅爲默認值。

我知道另一種解決方案是找到方法主要HWND和SetWindowPos()

如果你想尺寸,是的。

這涉及到枚舉所有窗口,找到正確的和一些應用程序需要一段時間來啓動這樣的窗口是活着我叫EnumWindows的時間()

嘗試調用WaitForInputIdle()第一(caveat #1caveat #2)。

或者,使用SetWinEventHook()監視窗口創作,直到你看到你有興趣在窗口

相關:How to determine when spawned process is ready? (Using CreateProcess() and FindWindow())