Здравствуйте.
Снова я.
И вот возникла у меня необходимость разобраться в том, в чем я совсем ничего не понимаю.
Суть.
Надо связать два приложения.
Все дело происходит под Окнами.
Есть запущенное приложение. У приложения есть дочерняя форма (пусть будет открытая на данный момент), на этой форме пара GroupBox, в них набор Edit. Необходимо по нажатию кнопки в моем приложении отправить в эти Edit определенный текст. Первое приложение тоже мое. Это, я думаю, что-то может упростить. Дополнительная сложность в том, что имя формы может быть разным (в зависимости от того, какой язык интерфейса активен).
Я в курсе, что это можно сделать через WinApi. Но, во-первых, очень бы не хотелось, а во-вторых, в WinApi я совершенно ничего не понимаю.
Прошу помощи.
Может быть есть какой-то способ без использования WinApi все-таки? Тем более доступ к внутренностям обоих приложений у меня, естественно, имеется.
P.S. Все, чего я пока добился (используя-таки WinApi), это успешное нахождение приложения, дочерней формы по заголовку (что не желательно). Все.
Доступ к Edit стороннего приложения.
Модератор: Модераторы
- Снег Север
- долгожитель
- Сообщения: 3071
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
Есть только два способа - через message - зная handle другой формы, и через сокеты, организуя полноценную клиент-серверную связку. Третьего способа я не знаю.
Это у вас просто предвзятое отношение. К WinAPI.
Способов организации взаимодействия между программами великое множество. На английском это обычно называется IPC:
1) Общая память (Sharid Memory)
2) Сокеты (WinSock, SOCKETS[Unix])
3) Именованные каналы (Name Pipe)
4) Сообщения (Messages)
5) Почтовые ящики (Mailslots, MessageBox[Unix])
и тд.
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365574(v=vs.85).aspx
Подробнее можно прочитать в книге Дж Ритхер "Windows для профессионалов" (у него много книг с разными названиями, а суть одна)
Способов организации взаимодействия между программами великое множество. На английском это обычно называется IPC:
1) Общая память (Sharid Memory)
2) Сокеты (WinSock, SOCKETS[Unix])
3) Именованные каналы (Name Pipe)
4) Сообщения (Messages)
5) Почтовые ящики (Mailslots, MessageBox[Unix])
и тд.
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365574(v=vs.85).aspx
Подробнее можно прочитать в книге Дж Ритхер "Windows для профессионалов" (у него много книг с разными названиями, а суть одна)
Выходит, проще однако через WinApi...
kotompazb писал(а):Все, чего я пока добился (используя-таки WinApi), это успешное нахождение приложения, дочерней формы по заголовку (что не желательно). Все.
Дык, вы вроде в одной строчке от цели. Найти хенд контрола и послать туда message.
kotompazb писал(а):Выходит, проще однако через WinApi...
Если не нарветесь на игнорирование Лазарусом некоторых сообщений, например, WM_COPYDATA прога с ходу не примет.
resident писал(а):Дык, вы вроде в одной строчке от цели. Найти хенд контрола и послать туда message.
Да. Только заголовки мне использовать нельзя - они меняются, при смене языка интерфейса (po-файл может быть отредактирован юзером, как ему будет угодно), поэтому искать нужное окошко пришлось по количеству и порядку дочерних контролов.
resident писал(а):Если не нарветесь на игнорирование Лазарусом некоторых сообщений, например, WM_COPYDATA прога с ходу не примет.
Мне надо было в едиты текст слать, WM_SETTEXT сработал, как задумывалось.
P.S. Конечно обидно, что приходится забивать на кроссплатформенность, но... учится чему-то совсем неизведанному нет возможности, программирование (если это можно так назвать) - только хобби, а свободного времени, как всегда...
