Russian Qt Forum

Qt => Вопросы новичков => Тема начата: deMax от Ноябрь 20, 2015, 09:29



Название: [РЕШЕНО] Запуск приложения (если запущенно то перейти на него)
Отправлено: deMax от Ноябрь 20, 2015, 09:29
Есть однооконное приложение запускаемое из основной программы(exe файл, название окна известно), как его запустить и если оно запущенно перейти на него?


Название: Re: Запуск приложения (если запущенно то перейти на него)
Отправлено: __Heaven__ от Ноябрь 20, 2015, 09:34
Посмотрите тут (http://habrahabr.ru/post/173281/)
Поищите ещё qtsingleapplication


Название: Re: Запуск приложения (если запущенно то перейти на него)
Отправлено: gil9red от Ноябрь 20, 2015, 09:40
Посмотрите тут (http://habrahabr.ru/post/173281/)
Поищите ещё 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();
   }
}
 


Название: Re: Запуск приложения (если запущенно то перейти на него)
Отправлено: ksk- от Ноябрь 20, 2015, 09:44
https://github.com/qtproject/qt-solutions/tree/master/qtsingleapplication (https://github.com/qtproject/qt-solutions/tree/master/qtsingleapplication)


Название: Re: Запуск приложения (если запущенно то перейти на него)
Отправлено: deMax от Ноябрь 20, 2015, 10:35
А порпоще варианты есть? Без подключения qtsingleapplication.


Название: Re: Запуск приложения (если запущенно то перейти на него)
Отправлено: ksk- от Ноябрь 20, 2015, 10:37
Да куда уж проще? Если не хочешь брать готовое, придётся делать самому.


Название: Re: Запуск приложения (если запущенно то перейти на него)
Отправлено: __Heaven__ от Ноябрь 20, 2015, 10:37
Без подключения qtsingleapplication.
Посмотрите тут (http://habrahabr.ru/post/173281/)


Название: Re: Запуск приложения (если запущенно то перейти на него)
Отправлено: Igors от Ноябрь 20, 2015, 10:53
Да куда уж проще? Если не хочешь брать готовое, придётся делать самому.
Я не в восторге от qtsingleapplication. Да, юзать просто, но довольно много "за сценой".

Самому - можно, через QSharedMemory. В качестве ключа проще всего полный путь


Название: Re: Запуск приложения (если запущенно то перейти на него)
Отправлено: Vamireh от Ноябрь 20, 2015, 11:33
Делал через QLocalSocket/QLocalServer.


Название: Re: Запуск приложения (если запущенно то перейти на него)
Отправлено: Day от Ноябрь 20, 2015, 20:42
Посмотрите тут (http://habrahabr.ru/post/173281/)
Спасибо! Чрезвычайно интересная статья!


Название: Re: Запуск приложения (если запущенно то перейти на него)
Отправлено: deMax от Ноябрь 22, 2015, 01:05
Посмотрите тут (http://habrahabr.ru/post/173281/)
Спасибо. А как сделать чтобы окно первого приложения всплывало при этом?

p.s. пока сделал побыстрому на winapi, по названию окон. Всплывание только через hide+show получилось


Название: Re: Запуск приложения (если запущенно то перейти на него)
Отправлено: gil9red от Ноябрь 22, 2015, 16:18
Посмотрите тут (http://habrahabr.ru/post/173281/)
Спасибо. А как сделать чтобы окно первого приложения всплывало при этом?

http://www.prog.org.ru/index.php?topic=29566.msg217244#msg217244


Название: Re: Запуск приложения (если запущенно то перейти на него)
Отправлено: Igors от Ноябрь 23, 2015, 11:36
p.s. пока сделал побыстрому на winapi, по названию окон.
Хранить HWND в той самой шаред памяти. Если    

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


Название: Re: Запуск приложения (если запущенно то перейти на него)
Отправлено: deMax от Ноябрь 27, 2015, 10:45
Igors, gil9red, спасибо.