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

Rah*_*hul 5 c++ windows createprocess

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

Mik*_*wan 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;
}
Run Code Online (Sandbox Code Playgroud)

调用EnumWindows()时,你需要传递你之前抓取的PID作为lParam,如下所示:

EnumWindows( EnumWindowsProc, ( LPARAM )( PI -> dwProcessId ) );
Run Code Online (Sandbox Code Playgroud)