Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2008, 07:29   #1
Спартак
Пользователь
 
Регистрация: 01.02.2008
Сообщений: 44
По умолчанию Как записать данные в другую программу?

Доброго времени суток, коллеги!
Такая ситуация: есть 2 Windows application-а. Допустим, что в форме первого приложения есть текстовое поле, и в нем записан текст. Можно ли вторым приложением получить доступ к этому тексту? Если можно, то как?
Спартак вне форума Ответить с цитированием
Старый 19.04.2008, 11:20   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Можно. Смотри поиск, не раз обсуждалось.
функции: FindWindow, FindWindowEx, SendMessage, SetWindowText, GetWindowText .
rpy3uH вне форума Ответить с цитированием
Старый 19.04.2008, 11:36   #3
Спартак
Пользователь
 
Регистрация: 01.02.2008
Сообщений: 44
По умолчанию

большое спасибо!! буду копать в этом направлении
Спартак вне форума Ответить с цитированием
Старый 19.04.2008, 15:54   #4
Спартак
Пользователь
 
Регистрация: 01.02.2008
Сообщений: 44
По умолчанию

Итак, вот текст:
procedure ReceiveMessage (var Msg: TMessage);
message WM_COPYDATA;
...
procedure TForm1.ReceiveMessage;
var
pcd: PCopyDataStruct;
cd: TCopyDataStruct;
begin
pcd := PCopyDataStruct(Msg.LParam);
Caption := PChar(pcd.lpData);
if h = 0 then h := FindWindow(nil, 'Form1');
cd.cbData := Length(PChar(IntToStr(STrToInt(Capt ion) + 1))) + 1;
cd.lpData := PChar(IntToStr(StrToInt(Caption) + 1));
SendMessage(h, WM_COPYDATA, 0, LParam(@cd));
end;
т.е. процедура принимает сообщение (число), прибавляет к нему 1 и отправляет обратно... все красиво, только есть несколько моментов:
1. что такое message WM_COPYDATA;?
2. может это как-нибудь покрасивее моно сделать?? собственно задача-то ставилась ВЗЯТЬ данные из текстового поля левой программы (тоже написанной мной). А если работать по этому коду, то мне придется этой программе отправлять какую-то команду, в ответ на которую эта самая программа должна отсылать мне данные текстового поля некрасиво может кто-нибудь знает решение?
Спартак вне форума Ответить с цитированием
Старый 19.04.2008, 16:03   #5
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Спартак Посмотреть сообщение
собственно задача-то ставилась ВЗЯТЬ данные из текстового поля левой программы (тоже написанной мной). А если работать по этому коду, то мне придется этой программе отправлять какую-то команду, в ответ на которую эта самая программа должна отсылать мне данные текстового поля некрасиво может кто-нибудь знает решение?
Ну так и берите текст через GetWindowTextLength - GetWindowText. Вам никто WM_COPYDATA пользоваться и не предлагал.
B_N вне форума Ответить с цитированием
Старый 19.04.2008, 16:06   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

1.
Цитата:
что такое message WM_COPYDATA?
Borland Shared\MSHelp\WIN32.HLP :
Цитата:
Тhe WM_COPYDATA message is sent when an application passes data to another application.
и так далее. Учитесь использовать себе во благо великолепную систему подсказок Дельфи, не пожалеете!

2.
Цитата:
собственно задача-то ставилась ВЗЯТЬ данные из текстового поля левой программы (тоже написанной мной). А если работать по этому коду, то мне придется этой программе отправлять какую-то команду, в ответ на которую эта самая программа должна отсылать мне данные текстового поля
Тогда придумайте как сделать, чтобы компьютер понимал ваши биотоки, мысли и т.п.
Он работает по командам, увы. Так что команды нужно подавать, никуда не денешься.
Другое дело - по какому событию эти команды подавать...

Последний раз редактировалось mihali4; 19.04.2008 в 16:08.
mihali4 вне форума Ответить с цитированием
Старый 19.04.2008, 16:47   #7
Спартак
Пользователь
 
Регистрация: 01.02.2008
Сообщений: 44
По умолчанию

Цитата:
Сообщение от B_N Посмотреть сообщение
Ну так и берите текст через GetWindowTextLength - GetWindowText.
Эти функции работают с заголовком формы (тот, который Caption), а мне нужны данные из текстового поля (TEdit)

Цитата:
Сообщение от mihali4 Посмотреть сообщение
1.
Тогда придумайте как сделать, чтобы компьютер понимал ваши биотоки, мысли и т.п.
Он работает по командам, увы. Так что команды нужно подавать, никуда не денешься.
Другое дело - по какому событию эти команды подавать...
тут события быть не должно... в вакууме это должно быть так: вторая программа вообще тупо стоит и молчит... первая просто берет данные из Edit-а второй программы и что-то с ними делает..
вот мне и интересно, есть ли такие команды, т.к. сегодня весь день просидел в инете и толком ничего не нашел... все, что есть - работает с заголовком окна
Сами понимаете, не очень приятно, когда пользователь работает с программой, а в ней заголовок постоянно мигает
Спартак вне форума Ответить с цитированием
Старый 19.04.2008, 16:59   #8
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Спартак Посмотреть сообщение
Эти функции работают с заголовком формы (тот, который Caption), а мне нужны данные из текстового поля (TEdit)
Они работают с любыми окнами. Из другого процесса через WM_GETTEXT берите текст.
B_N вне форума Ответить с цитированием
Старый 19.04.2008, 17:04   #9
Спартак
Пользователь
 
Регистрация: 01.02.2008
Сообщений: 44
По умолчанию

Цитата:
Сообщение от B_N Посмотреть сообщение
Они работают с любыми окнами. Из другого процесса через WM_GETTEXT берите текст.
каждый человек специализируется в своей сфере... я в первый раз столкнутся с такой необходимостью... если есть примеры исходников - выложите пожалуйста... буду очень благодарен
Спартак вне форума Ответить с цитированием
Старый 19.04.2008, 17:13   #10
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
первая просто берет данные из Edit-а второй программы и что-то с ними делает
А когда она должна взять эти данные? Когда в эдите будет нажат энтер? Или она все время должна отслеживать изменения в эдите? Если так - сделайте "взять данные" по таймеру или по событию изменения содержимого эдита...
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как «внедриться» в другую программу? forzub Общие вопросы Delphi 0 10.07.2008 17:33
Как записать свою программу в другую? AngelOfDeath Общие вопросы Delphi 1 12.05.2008 06:12
как можно иначе записать программу Malinka Помощь студентам 2 15.01.2008 11:08
Как записать в com -порт или модем двоичные данные sergrom Win Api 10 25.06.2007 15:15
Отправлять данные из одной таблицы в другую Таня84 БД в Delphi 14 28.04.2007 23:23