Как я могу гарантировать, что мой процесс получает фокус, когда один из его дочерних процессов закрывается? - PullRequest
0 голосов
/ 12 октября 2018

Небольшой фон

Наше приложение (AppA) вызывает стороннее приложение (AppB).Мы моделируем окно AppB как модальное для нашего приложения.

pseudo
while AppB_Running
  If AppA_focused
    SetForeGroundWindow(AppB_Hwnd)
  HandleMessage
SetForegroundWindow(AppA_HWnd)

Это работало в течение многих лет без инцидентов, то есть до тех пор, пока мы не начали развертывать Windows 10. Мы начали получать отчеты о случайном приложении (Когда мы закрывали AppB, когда-то фокусировался на AppC (на самом деле, учитывая технические знания нашего пользователя, отчет был более похож на «Закрытие AppB убивает AppA», но я отвлекся).Такое поведение может быть воспроизведено время от времени (<5%) на компьютере разработчика (но еще не во время отладки ...) </p>

Пока результаты теста показывают, что AppC - это приложение, которое было в фокусе до AppA.

Есть ли способ, которым я могу гарантировать, что AppA вернет фокус при закрытии AppB?

Дополнительные примечания

Проблема может быть воспроизведена, даже если AppA потеряет фокус только на AppB.(AppC никогда не фокусируется после запуска AppA)

1 Ответ

0 голосов
/ 15 октября 2018

Хотя это не дает прямого ответа на мой первоначальный вопрос, оно дает более глубокое понимание проблемы и может быть полезным для кого-то еще.

Частью проблемы был недосмотр с нашей стороны.Более конкретно, способ, которым мы получили AppB_HWnd.Мы в основном выбрали первое окно верхнего уровня, с которым столкнулись.В нашем текущем тестовом примере это окно является невидимым (MSCTFIME UI).Вызов SetForegroundWindow для невидимого окна, по-видимому, не вызывает проблем сам по себе, Windows, кажется, просто выводит на передний план одно из видимых окон процесса.Когда указанный процесс не имеет видимых окон, кажется, что все идет не так, как надо.В нашем случае это обычно происходит между моментом закрытия главного окна AppB и моментом окончания процесса.

Итак ... Не вызывайте SetForegroundWindow для невидимого окна

Что касается того, почему мыне было никаких проблем в Win7?Возможно, первое окно всегда было видимым.Или, может быть, SetForegroundWindow тогда вел себя иначе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...