如何将窗口放在通过CreateProcess创build的进程之上

我正在使用CreateProcess API从我的应用程序启动一个进程,并且希望将新进程的窗口置顶。 有没有办法做到这一点? 我们有CreateProcess的标志或类似的东西吗?

Solutions Collecting From Web of "如何将窗口放在通过CreateProcess创build的进程之上"

您可以尝试使用通过CreateProcess传入的STARTUPINFO结构并设置SW_SHOW。 我不确定这将有助于把重点放在顶端。 如果这不起作用,请尝试以下操作。

首先,不要使用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()时,你将需要像前面那样传递你在lParam中获得的PID:

 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