如何将窗口置于通过CreateProcess创建的进程之上

时间:2011-07-27 08:10:26

标签: c++ windows createprocess

我正在使用CreateProcess API从我的应用程序启动一个进程,我希望将新进程的窗口置于顶部。有办法吗?我们在CreateProcess中有任何标志或类似内容吗?

2 个答案:

答案 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