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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как передать аргумент внешнему уже запущенному приложению?  (Прочитано 7945 раз)
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« : Апрель 14, 2016, 16:00 »

Здравствуйте, господа форумчане. Совсем недавно я разобрался как из своего приложения запустить внешнее приложение с аргументом, используя метод startDetached(полное_имя_приложения, аргумент). Теперь вот задался вопросом: "А как же передать аргумент из своего приложения в уже запущенное приложение? Может и для этого имеется уже какая-нибудь готовая функция?". Пока ничего по этому поводу не нашел.
Записан
ssoft
Программист
*****
Offline Offline

Сообщений: 584


Просмотр профиля
« Ответ #1 : Апрель 14, 2016, 17:01 »

Запоминаем входящие аргументы
Код
C++ (Qt)
int main( int argc, char ** argv )
, передаем их в дочернее приложение. Автомата нет.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #2 : Апрель 14, 2016, 18:50 »

Если запущенное приложение гуевое - то (ЕМНИП) только через пайпы (например QLocalServer/Socket), сокеты, шаред мемори.
Если запущенное приложение консольное - то (ЕМНИП) можно слать ему что-то в stdin/out... хотя хЗ
Записан

ArchLinux x86_64 / Win10 64 bit
Bepec
Гость
« Ответ #3 : Апрель 14, 2016, 20:12 »

Сокеты спасут вас. Единого механизма обработки сообщений пока не ввели в Qt.
В сети есть пара классов для синхронизации данных нескольких сообщений и они довольно легко переделываются в нужную вам вещь Улыбающийся
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #4 : Апрель 14, 2016, 21:08 »

А внешнее приложение поддерживает какой-то механизм IPC? Если нет, то никак.
Записан
ssoft
Программист
*****
Offline Offline

Сообщений: 584


Просмотр профиля
« Ответ #5 : Апрель 14, 2016, 22:27 »

Видно я не верно понял вопрос.)
Если разговор про обмен сообщениями между приложениями, то здесь помогут сокеты и, например, QexRemint https://sourceforge.net/projects/qexremint/ для межпроцессного сигнал-слот взаимодействия.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Апрель 15, 2016, 08:36 »

Если приложение чужое и общаться с Вашим не стремится, то остаются системные средства, напр "открыть файл" стороннее приложение может понимать.
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #7 : Апрель 15, 2016, 10:28 »

А внешнее приложение поддерживает какой-то механизм IPC? Если нет, то никак.
Ну можно внедриться в процесс и поуправлять им слегка. Как к примеру работает openconf и 1С.

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

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #8 : Апрель 15, 2016, 13:16 »

По поводу моего вопроса: Я создал одно GUI главное приложение, из которого вызываю через метод startDetached(полное_имя_приложения, аргумент) второе мое GUI приложение (справка). В качестве параметра передаю в аргумент -lru или -len, в зависимости от того, какой язык сейчас выбран в моем главном приложении. В результате второе приложение уже запускается с тем же языком интерфейса, что установлен и во главном приложении. Теперь же я хочу реализовать переключение языка интерфейса в своих приложениях, таким образом, чтобы при смене языка интерфейса в главном приложении, он менялся и во втором моем приложении, если оно уже было открыто из-под главного приложения.
Но вот пока не могу понять как это реализовать.

Всем огромное спасибо за ответы. Буду разбираться с сокетами.
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #9 : Апрель 15, 2016, 13:38 »

Как вариант:

Сделать приложение-справку на базе QtSingleApplication.

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

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

Делается в несколько строк.
« Последнее редактирование: Апрель 15, 2016, 13:41 от navrocky » Записан

Гугль в помощь
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #10 : Апрель 15, 2016, 15:13 »

Как вариант:

Сделать приложение-справку на базе QtSingleApplication.

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

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

Делается в несколько строк.
Спасибо за ответ, но у себя в Qt5.3.2 я не нахожу класса QtSingleApplication. (
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #11 : Апрель 15, 2016, 15:29 »

Потому что, оно не входит в комплект. Нужно вам скачать и добавить в проект
Записан

navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #12 : Апрель 18, 2016, 12:52 »

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

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

Гугль в помощь
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #13 : Апрель 18, 2016, 15:33 »

Всем спасибо за ответ. navrocky, благодарю за ссылку.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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