Название: Как передать аргумент внешнему уже запущенному приложению? Отправлено: billy4685 от Апрель 14, 2016, 16:00 Здравствуйте, господа форумчане. Совсем недавно я разобрался как из своего приложения запустить внешнее приложение с аргументом, используя метод startDetached(полное_имя_приложения, аргумент). Теперь вот задался вопросом: "А как же передать аргумент из своего приложения в уже запущенное приложение? Может и для этого имеется уже какая-нибудь готовая функция?". Пока ничего по этому поводу не нашел.
Название: Re: Как передать аргумент внешнему уже запущенному приложению? Отправлено: ssoft от Апрель 14, 2016, 17:01 Запоминаем входящие аргументы
Код , передаем их в дочернее приложение. Автомата нет. Название: 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 Как вариант: Спасибо за ответ, но у себя в Qt5.3.2 я не нахожу класса QtSingleApplication. ( Сделать приложение-справку на базе QtSingleApplication (https://github.com/qtproject/qt-solutions). Инструкция: https://doc.qt.io/archives/qtextended4.4/qtopiadesktop/qtsingleapplication.html#details Внутри определять что экземпляр приложения уже запущен и воспользовавшись IPC, которое предоставляет QtSingleApplication, послать сообщение с необходимой командой и завершиться. Делается в несколько строк. Название: Re: Как передать аргумент внешнему уже запущенному приложению? Отправлено: gil9red от Апрель 15, 2016, 15:29 Потому что, оно не входит в комплект. Нужно вам скачать и добавить в проект
Название: Re: Как передать аргумент внешнему уже запущенному приложению? Отправлено: navrocky от Апрель 18, 2016, 12:52 Спасибо за ответ, но у себя в Qt5.3.2 я не нахожу класса QtSingleApplication. ( Да не входит и раньше не входил, но довольно известная штука. Я как раз ссылки дал. Название: Re: Как передать аргумент внешнему уже запущенному приложению? Отправлено: billy4685 от Апрель 18, 2016, 15:33 Всем спасибо за ответ. navrocky, благодарю за ссылку.
|