CreateProcess API を使用してアプリケーションからプロセスを起動しています。新しいプロセスのウィンドウを一番上に表示したいと考えています。それを行う方法はありますか?CreateProcess にフラグなどはありますか?
2 に答える
CreateProcess で渡され、SW_SHOW を設定するSTARTUPINFO構造体を使用することができます。ただし、これが焦点をトップにもたらすのに役立つかどうかはわかりません。それでもうまくいかない場合は、次のことを試してください。
まず、FindWindow() を使用しないでください。ウィンドウ名とクラス名でしか機能しないため、不必要に信頼できません。代わりに、CreateProcess() 呼び出しから lpProcessInformation を読み取り、 dwProcessIdを取得する必要があります。次にEnumWindows()を呼び出し、コールバックを次のようにします。
BOOL CALLBACK EnumWindowsProc( HWND hwnd, LPARAM lParam ) {
DWORD dwPID;
GetWindowThreadProcessId( hwnd, &dwPID );
if( dwPID == lParam ) {
SetWindowPos( hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE );
// Or just SetFocus( hwnd );
return FALSE;
}
return TRUE;
}
EnumWindows() を呼び出すときは、以前に取得した PID を次のように lParam として渡す必要があります。
EnumWindows( EnumWindowsProc, ( LPARAM )( PI -> dwProcessId ) );
起動したアプリケーションのウィンドウ ハンドルが必要です。持っていない場合は、FindWindowA API 呼び出しを使用できます。
次に、ウィンドウ ハンドルをパラメータとして SetFocus API 呼び出しを使用します。
関連リンク:
http://www.andreavb.com/tip020001.html
http://msdn.microsoft.com/en-us/library/aa697422%28v=vs.71%29.aspx