2016-07-15 10 views
0

私は別のアプリケーションを起動し、そのメインHWNDの位置とサイズを設定しています。 STARTUPINFOフラグを使用してウィンドウのサイズを指定していますが、新しいプロセスでCW_USEDEFAULTがそのCreateWindow()機能で使用されている場合にのみ、これらのサイズに従うように見えます。プロセスの開始と常にプロセスの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を(見つけるために、別の解決策を知っています。

正しいものを見つけるために、すべてのウィンドウを列挙し、いくつかのアプリケーションは起動に時間がかかることを伴う

ので、ウィンドウは、

が最初WaitForInputIdle()を呼び出して試してみてください、私はEnumWindowsを呼び出し時間()(caveat #1で生きていますcaveat #2)。

または、あなたはあなたが興味のあるウィンドウが表示されるまで、ウィンドウの作品を監視するためにSetWinEventHook()を使用

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

関連する問題