6

我正在使用 CreateProcess API 从我的应用程序启动一个进程,并且我想将新进程的窗口置于顶部。有没有办法做到这一点?CreateProcess 是否有任何标志或类似的东西?

4

2 回答 2

9

您可以尝试使用通过 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 ) );
于 2011-07-27T09:23:44.693 回答
0

您需要您启动的应用程序的窗口句柄。如果没有,可以使用 FindWindowA API 调用。

然后使用带有窗口句柄作为参数的 SetFocus API 调用。

相关链接:

http://www.andreavb.com/tip020001.html
http://msdn.microsoft.com/en-us/library/aa697422%28v=vs.71%29.aspx

于 2011-07-27T08:24:13.987 回答