2013-08-29 2 views
6

Я хотел бы сфокусировать файл .exe (более конкретно консольное приложение) на одну функционирующую программу, которая впервые запустила его, но когда выполняется второй раз (пока первый существует), он может превратить фокус в первая запущенная программа. Возможно ли это вообще в Qt?Приложение одного экземпляра в Qt

ответ

9

Для примера см. Run only one instance of a Qt application.

Не считая переносимости, если вы работаете в Windows, другой общий подход заключается в создании named pipe (или named mutex) при запуске приложения и уничтожении его перед выходом. Если именованный канал уже существует, другой экземпляр уже запущен. Вы даже можете записать в именованный канал, попросив другой экземпляр перенести его окно на передний план, хотя консольное приложение может не воспользоваться этим.

Другой способ фокусировки существующего экземпляра, чтобы найти окно уже запущенного экземпляра, затем вызовите SetFocus на ИТС HWND или соответствующей функции на вашей платформе.

+0

Большое спасибо, но я не получил проблему с именем _named_pipe_. – elgolondrino

+0

Вы вызываете ** [CreateNamedPipe] (http://msdn.microsoft.com/en-us/library/aa365150) ** для создания именованного канала, и если он терпит неудачу (возвращаемое значение - INVALID_HANDLE_VALUE), это означает другой экземпляр уже создал канал с тем же именем, поэтому вы знаете, что еще один экземпляр уже запущен. – jweyrich

Смежные вопросы