Russian Qt Forum
Ноябрь 25, 2024, 02:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Запуск приложения (если запущенно то перейти на него)  (Прочитано 7169 раз)
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« : Ноябрь 20, 2015, 09:29 »

Есть однооконное приложение запускаемое из основной программы(exe файл, название окна известно), как его запустить и если оно запущенно перейти на него?
« Последнее редактирование: Ноябрь 27, 2015, 10:45 от deMax » Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #1 : Ноябрь 20, 2015, 09:34 »

Посмотрите тут
Поищите ещё qtsingleapplication
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #2 : Ноябрь 20, 2015, 09:40 »

Посмотрите тут
Поищите ещё qtsingleapplication

Дополню вырезкой из старого приложения:


Код
C++ (Qt)
 
   QtSingleApplication app( argc, argv );    
 
   // Если копия приложения уже запущена, тогда отсылаем сообщение той копии и заканчиваем процесс
   if ( app.isRunning() )
   {
       app.sendMessage( "-show -message" );
       return 0;
   }
 
   Manager manager;
   QObject::connect(&app, SIGNAL(messageReceived(QString)), &manager, SLOT(messageReceived(QString)));
   QObject::connect(&app, SIGNAL(aboutToQuit()), &manager, SLOT(quit()));
 

Код
C++ (Qt)
void Manager::messageReceived( const QString & text )
{
   foreach ( const QString & command, text.split(" ") )
   {
       if ( command == "-show" )
           showManager();
 
       else if ( command == "-message" )
           tray->showMessage( tr( "Information" ), tr( "Application is already running" ), QSystemTrayIcon::Information, 5000 );
 
       else if ( command == "-beep" )
           qApp->beep();
   }
}
 
Записан

ksk-
Самовар
**
Offline Offline

Сообщений: 178



Просмотр профиля
« Ответ #3 : Ноябрь 20, 2015, 09:44 »

https://github.com/qtproject/qt-solutions/tree/master/qtsingleapplication
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #4 : Ноябрь 20, 2015, 10:35 »

А порпоще варианты есть? Без подключения qtsingleapplication.
Записан
ksk-
Самовар
**
Offline Offline

Сообщений: 178



Просмотр профиля
« Ответ #5 : Ноябрь 20, 2015, 10:37 »

Да куда уж проще? Если не хочешь брать готовое, придётся делать самому.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #6 : Ноябрь 20, 2015, 10:37 »

Без подключения qtsingleapplication.
Посмотрите тут
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Ноябрь 20, 2015, 10:53 »

Да куда уж проще? Если не хочешь брать готовое, придётся делать самому.
Я не в восторге от qtsingleapplication. Да, юзать просто, но довольно много "за сценой".

Самому - можно, через QSharedMemory. В качестве ключа проще всего полный путь
Записан
Vamireh
Гость
« Ответ #8 : Ноябрь 20, 2015, 11:33 »

Делал через QLocalSocket/QLocalServer.
Записан
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« Ответ #9 : Ноябрь 20, 2015, 20:42 »

Посмотрите тут
Спасибо! Чрезвычайно интересная статья!
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #10 : Ноябрь 22, 2015, 01:05 »

Посмотрите тут
Спасибо. А как сделать чтобы окно первого приложения всплывало при этом?

p.s. пока сделал побыстрому на winapi, по названию окон. Всплывание только через hide+show получилось
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #11 : Ноябрь 22, 2015, 16:18 »

Посмотрите тут
Спасибо. А как сделать чтобы окно первого приложения всплывало при этом?

http://www.prog.org.ru/index.php?topic=29566.msg217244#msg217244
Записан

Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #12 : Ноябрь 23, 2015, 11:36 »

p.s. пока сделал побыстрому на winapi, по названию окон.
Хранить HWND в той самой шаред памяти. Если    

Всплывание только через hide+show получилось
   
Код
C++ (Qt)
if (IsIconic(wnd)) ShowWindow(wnd, SW_RESTORE);
SetForegroundWindow(wnd);
 
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #13 : Ноябрь 27, 2015, 10:45 »

Igors, gil9red, спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.322 секунд. Запросов: 22.