Qt Необходимо вывести приложение Qt на передний план, вызываемое из приложения win32 - PullRequest
3 голосов
/ 07 мая 2011

У меня есть простое приложение win32, которое использует метод createProcess для вызова приложения Qt.

Проблема в том, что мне нравится выводить приложение Qt на передний план.

Кто за это отвечает? Родительское приложение win32 или приложение Qt?

Ответы [ 3 ]

3 голосов
/ 07 мая 2011

Приложение, которое в настоящее время имеет фокус переднего плана, является единственным, которому разрешено изменять фокус переднего плана.Вам необходимо использовать функцию SetForegroundWindow для реализации этого права.

Раздел «Замечания» в документации содержит соответствующий список ограничений:

Система ограничивает, какие процессы могут установить окно переднего плана.Процесс может установить окно переднего плана, только если выполняется одно из следующих условий:

  • Процесс является процессом переднего плана.
  • Процесс был запущен процессом переднего плана.
  • Процесс получил последнее входное событие.
  • Процесс переднего плана отсутствует.
  • Процесс переднего плана отлаживается.
  • Передний план не заблокирован (см.LockSetForegroundWindow).
  • Истекло время ожидания блокировки переднего плана (см. SPI_GETFOREGROUNDLOCKTIMEOUT in SystemParametersInfo).
  • Нет активных меню.

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

Реальный вопрос заключается в том, зачем вам это вообще нужно делать.Смена приложения переднего плана может привести к неприятностям либо со всеми ограничениями, которые накладывает на него Windows, либо с вашими пользователями.Это очень враждебное для пользователя действие, которое является одной из причин, по которым Windows ужесточает ограничения на него в последние годы.

2 голосов
/ 07 мая 2011

Получить дескриптор окна приложения Qt и вызвать SetForegroundWindow

http://msdn.microsoft.com/en-us/library/ms633539.aspx

0 голосов
/ 07 мая 2011

Вы, вероятно, хотите сделать это из родительского процесса. Самый чистый / самый надежный способ использования SetForegroundWindow - вызвать его из процесса, который в настоящее время находится на переднем плане.

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