Как вывести окно поверх процесса, созданного с помощью CreateProcess - PullRequest
4 голосов
/ 27 июля 2011

Я запускаю процесс из своего приложения, используя API CreateProcess, и я хочу, чтобы окно нового процесса было наверху.Есть ли способ сделать это?У нас есть какой-нибудь флаг или что-то подобное с CreateProcess?

Ответы [ 2 ]

8 голосов
/ 27 июля 2011

Вы можете попытаться использовать структуру STARTUPINFO , которая передается с CreateProcess, и установить 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 ) );
0 голосов
/ 27 июля 2011

Вам нужен дескриптор окна запущенного вами приложения. Если у вас его нет, вы можете использовать API-вызов FindWindowA.

Затем используйте вызов API SetFocus с дескриптором окна в качестве параметра.

Ссылки по теме:

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

...