Russian Qt Forum

Qt => Вопросы новичков => Тема начата: billy4685 от Апрель 14, 2016, 16:00



Название: Как передать аргумент внешнему уже запущенному приложению?
Отправлено: billy4685 от Апрель 14, 2016, 16:00
Здравствуйте, господа форумчане. Совсем недавно я разобрался как из своего приложения запустить внешнее приложение с аргументом, используя метод startDetached(полное_имя_приложения, аргумент). Теперь вот задался вопросом: "А как же передать аргумент из своего приложения в уже запущенное приложение? Может и для этого имеется уже какая-нибудь готовая функция?". Пока ничего по этому поводу не нашел.


Название: Re: Как передать аргумент внешнему уже запущенному приложению?
Отправлено: ssoft от Апрель 14, 2016, 17:01
Запоминаем входящие аргументы
Код
C++ (Qt)
int main( int argc, char ** argv )
, передаем их в дочернее приложение. Автомата нет.


Название: Re: Как передать аргумент внешнему уже запущенному приложению?
Отправлено: kuzulis от Апрель 14, 2016, 18:50
Если запущенное приложение гуевое - то (ЕМНИП) только через пайпы (например QLocalServer/Socket), сокеты, шаред мемори.
Если запущенное приложение консольное - то (ЕМНИП) можно слать ему что-то в stdin/out... хотя хЗ


Название: Re: Как передать аргумент внешнему уже запущенному приложению?
Отправлено: Bepec от Апрель 14, 2016, 20:12
Сокеты спасут вас. Единого механизма обработки сообщений пока не ввели в Qt.
В сети есть пара классов для синхронизации данных нескольких сообщений и они довольно легко переделываются в нужную вам вещь :)


Название: Re: Как передать аргумент внешнему уже запущенному приложению?
Отправлено: Alex Custov от Апрель 14, 2016, 21:08
А внешнее приложение поддерживает какой-то механизм IPC? Если нет, то никак.


Название: Re: Как передать аргумент внешнему уже запущенному приложению?
Отправлено: ssoft от Апрель 14, 2016, 22:27
Видно я не верно понял вопрос.)
Если разговор про обмен сообщениями между приложениями, то здесь помогут сокеты и, например, QexRemint https://sourceforge.net/projects/qexremint/ (https://sourceforge.net/projects/qexremint/) для межпроцессного сигнал-слот взаимодействия.


Название: Re: Как передать аргумент внешнему уже запущенному приложению?
Отправлено: Igors от Апрель 15, 2016, 08:36
Если приложение чужое и общаться с Вашим не стремится, то остаются системные средства, напр "открыть файл" стороннее приложение может понимать.


Название: Re: Как передать аргумент внешнему уже запущенному приложению?
Отправлено: panAlexey от Апрель 15, 2016, 10:28
А внешнее приложение поддерживает какой-то механизм IPC? Если нет, то никак.
Ну можно внедриться в процесс и поуправлять им слегка. Как к примеру работает openconf и 1С.

Внешнее приложение - чьё? Автора или сторонее? Если автора, тогда можно использовать разные механизмы межпроцессной коммуникации.


Название: Re: Как передать аргумент внешнему уже запущенному приложению?
Отправлено: billy4685 от Апрель 15, 2016, 13:16
По поводу моего вопроса: Я создал одно GUI главное приложение, из которого вызываю через метод startDetached(полное_имя_приложения, аргумент) второе мое GUI приложение (справка). В качестве параметра передаю в аргумент -lru или -len, в зависимости от того, какой язык сейчас выбран в моем главном приложении. В результате второе приложение уже запускается с тем же языком интерфейса, что установлен и во главном приложении. Теперь же я хочу реализовать переключение языка интерфейса в своих приложениях, таким образом, чтобы при смене языка интерфейса в главном приложении, он менялся и во втором моем приложении, если оно уже было открыто из-под главного приложения.
Но вот пока не могу понять как это реализовать.

Всем огромное спасибо за ответы. Буду разбираться с сокетами.


Название: Re: Как передать аргумент внешнему уже запущенному приложению?
Отправлено: navrocky от Апрель 15, 2016, 13:38
Как вариант:

Сделать приложение-справку на базе QtSingleApplication (https://github.com/qtproject/qt-solutions).

Инструкция: https://doc.qt.io/archives/qtextended4.4/qtopiadesktop/qtsingleapplication.html#details

Внутри определять что экземпляр приложения уже запущен и воспользовавшись IPC, которое предоставляет QtSingleApplication, послать сообщение с необходимой командой и завершиться.

Делается в несколько строк.


Название: Re: Как передать аргумент внешнему уже запущенному приложению?
Отправлено: billy4685 от Апрель 15, 2016, 15:13
Как вариант:

Сделать приложение-справку на базе QtSingleApplication (https://github.com/qtproject/qt-solutions).

Инструкция: https://doc.qt.io/archives/qtextended4.4/qtopiadesktop/qtsingleapplication.html#details

Внутри определять что экземпляр приложения уже запущен и воспользовавшись IPC, которое предоставляет QtSingleApplication, послать сообщение с необходимой командой и завершиться.

Делается в несколько строк.
Спасибо за ответ, но у себя в Qt5.3.2 я не нахожу класса QtSingleApplication. (


Название: Re: Как передать аргумент внешнему уже запущенному приложению?
Отправлено: gil9red от Апрель 15, 2016, 15:29
Потому что, оно не входит в комплект. Нужно вам скачать и добавить в проект


Название: Re: Как передать аргумент внешнему уже запущенному приложению?
Отправлено: navrocky от Апрель 18, 2016, 12:52
Спасибо за ответ, но у себя в Qt5.3.2 я не нахожу класса QtSingleApplication. (

Да не входит и раньше не входил, но довольно известная штука. Я как раз ссылки дал.


Название: Re: Как передать аргумент внешнему уже запущенному приложению?
Отправлено: billy4685 от Апрель 18, 2016, 15:33
Всем спасибо за ответ. navrocky, благодарю за ссылку.