Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Dsgjkyb [D7, WinXP]


Still Swamp ©   (2008-05-28 11:03:00) 

Есть некое оконное Win32 приложение. Запускаем его и получаем процесс A. Хотелось бы при запуске его второй копии (процеесс B) иметь возможность выполнить какую нить функцию в процессе A вызываемую из процесса B.

Как это сделать.


Palladin   (2008-05-29 07:51:00) [1]


> Still Swamp   (28.05.08 19:56) [12]

и все чтоли? больше ничего в хелпе не написано? или ты больше ниасилил?


Юрий Зотов   (2008-05-29 02:10:00) [2]

Кстати, о птичках. Если при посылке оба параметра равны нулю (как в коде, который Вы привели), то ЧТО же посылается?

Ничего. Соответственно, и прочитать ничего нельзя. Нечего читать-то.


Юрий Зотов   (2008-05-29 02:07:00) [3]

> Still Swamp   (28.05.08 19:56) [12]
> я не могу прочитать ничего из того куда она указывает.

Значит, не так читаете. Почему бы не показать код чтения? Или будем гадать на кофейной гуще?


Still Swamp   (2008-05-28 19:56:00) [4]

Как послать строку?
Хотя в прочем как послать хоть что нить. У меня доходит указанная структура, но я не могу прочитать ничего из того куда она указывает.

Хотя в хелпе написано буквально следующее:

WM_COPYDATA Message

--------------------------------------------------------------------------------

An application sends the WM_COPYDATA message to pass data to another application.


МистерТ   (2008-05-28 19:50:00) [5]

> Как я понимаю физически приложения работают в разных областях
> памяти.

Правильно понимаешь, строки не так посылаются.


Still Swamp   (2008-05-28 19:35:00) [6]

Если я правильно понял то WM_COPYDATA не вариант между двумя независимыми приложениями. Мессага доходит. Из структуры я адрес где был мой PChar и его размер выгребаю. Они совпадают. Но по этому адресу у второго приложения лежит фуфель какой то. Как я понимаю физически приложения работают в разных областях памяти.


Плохиш   (2008-05-28 19:06:00) [7]


> Handle:=FindWindow(nil, PAnsiChar('VBCSLauncherMainForm'));

Фи, используй файл-маппинг.

var
         FHandle: THandle;
         FBuffer: Pointer;
begin
 FHandle := CreateFileMapping( $FFFFFFFF, nil, PAGE_READWRITE, 0,
                               4, 'Ento ja' );
 FBuffer := MapViewOfFile( FHandle, FILE_MAP_WRITE, 0, 0, 4 );
 If Integer( FBuffer^ ) = 0 then
 begin
   Application.Initialize;
   Application.CreateForm(TMainForm, MainForm);
   // тут всяко разно...
   Integer( FBuffer^ ) := <сдесь засунем, к примеру, хэндл того, кому пошлём>;
   Application.Run;
  end;
 UnmapViewOfFile( FBuffer );
 CloseHandle(FHandle);
end.


Still Swamp   (2008-05-28 18:56:00) [8]

C SendMessage затык.

Это до самого создания приложения

Handle:=FindWindow(nil, PAnsiChar('VBCSLauncherMainForm'));
if Handle<>0 then begin
 SendMessage(Handle, WM_COPYDATA, 0, 0);
end else begin
 Application.Initialize;
 Application.CreateForm(TVBCSLauncherMainForm, VBCSLauncherMainForm);
 Application.Run;
end;

Это уже в окошке в котором ловлю сообщения

private
procedure OnCopyData(var AMessage:TWMCopyData); message WM_COPYDATA;
public
end;

При повторном запусук сообщение второе отправляет мессагу но у первого никаких телодвижений не происходит.
Где грабля.


DiamondShark   (2008-05-28 13:19:00) [9]

Реализуй в процессе Automation-сервер.
Там не то, что PChar, слона просунуть можно.


Still Swamp   (2008-05-28 11:56:00) [10]

Сенкс.


Palladin   (2008-05-28 11:43:00) [11]

см. WM_COPYDATA


Still Swamp   (2008-05-28 11:42:00) [12]

SendMessage?
Хотелось бы PChar просунуть.
Описываю структуру, потом ее указатель параметром в Sendmessage отправлять. Так?


Palladin   (2008-05-28 11:38:00) [13]

используй механизм сообщений


Still Swamp   (2008-05-28 11:24:00) [14]

Мои извинения. Отредактировать мессагу не могу. Просто отвлекли когда отправлял. Если есть возможность, исправьте тему на "как вызвать процедуру в запущенном приложении из другого".


Palladin   (2008-05-28 11:18:00) [15]

Учимся оформлять вопросы (С) ИШ


Наверх

Титульная страница Поиск, карта сайта Написать письмо