我正在使用CreateProcess API从我的应用程序启动一个进程,我希望将新进程的窗口置于顶部。有办法吗?我们在CreateProcess中有任何标志或类似内容吗?
答案 0 :(得分:8)
您可以尝试使用通过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()时,你需要传递你之前抓住的PID作为lParam,如下所示:
EnumWindows( EnumWindowsProc, ( LPARAM )( PI -> dwProcessId ) );
答案 1 :(得分:0)
您需要启动的应用程序的窗口句柄。如果您没有,可以使用FindWindowA API调用。
然后使用带窗口句柄的SetFocus API调用作为参数。
相关链接:
http://www.andreavb.com/tip020001.html
http://msdn.microsoft.com/en-us/library/aa697422%28v=vs.71%29.aspx