Активные окна в Windows и QWidget :: activWindow () - PullRequest
4 голосов
/ 23 июля 2010

Документация Qt для QWidget::activateWindow() гласит:

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

Однако Skype, похоже, игнорирует это правило.Если Skype работает, но не является активным приложением, я могу запустить его из меню «Пуск», и оно выводит существующий экземпляр на передний план, активирует его и захватывает фокус ввода.1011 * сделать это?

Ответы [ 4 ]

6 голосов
/ 23 июля 2010

( ПРИМЕЧАНИЕ. Это относится к тому, как работает QtSingleApplication )

Решение глупо просто для моей проблемы.Просто вызовите AllowSetForegroundWindow(ASF_ANY); в начале приложения, и, таким образом, исходному процессу будет разрешено выдвинуть себя на передний план с помощью SetForegroundWindow().Никаких странных хаков, только одна строка кода для добавления и нет необходимости изменять QtSingleApplication.

1 голос
/ 23 июля 2010

Я не думаю, что вы можете сделать это надежно только с помощью Qt API.

Существует несколько решений для окон.Например, здесь , здесь и здесь .

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

Я не думаю, что у вас есть проблема с окнами, мешающими вам сделать это в этом случаепотому что ваш второй экземпляр является активным приложением, поэтому ему разрешено «передавать фокус» другим окнам.

0 голосов
/ 28 января 2016

Вы можете установить setWindowOpacity от 0 до 1. Единственное, что вы можете открывать его все время

0 голосов
/ 23 июля 2010

Использование Одно приложение в Qt Solutions

Для некоторых приложений это полезно или даже критично, что они запущены только один раз любым пользователем. Будущие попытки для запуска приложения следует активировать любой уже запущенный экземпляр, и, возможно, выполнить запрошенный действия, например загрузка файла, в том экземпляр.

...