Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.08.16;
Скачать: CL | DM;

Вниз

Dsgjkyb   Найти похожие ветки 

 
Still Swamp   (2008-05-28 11:03) [0]

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

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


 
Palladin ©   (2008-05-28 11:18) [1]

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


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

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


 
Palladin ©   (2008-05-28 11:38) [3]

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


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

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


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

см. WM_COPYDATA


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

Сенкс.


 
DiamondShark ©   (2008-05-28 13:19) [7]

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


 
Still Swamp   (2008-05-28 18:56) [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;

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


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


> 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 19:35) [10]

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


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

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

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


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

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

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

WM_COPYDATA Message

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

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


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

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

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


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

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

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


 
Palladin ©   (2008-05-29 07:51) [15]


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

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



Страницы: 1 вся ветка

Текущий архив: 2009.08.16;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.017 c
2-1245675524
dmitry1991
2009-06-22 16:58
2009.08.16
составить Pattern(RegExp)


2-1245521966
bred
2009-06-20 22:19
2009.08.16
ошибка при объявлении процедуры


15-1245399047
василий иванович
2009-06-19 12:10
2009.08.16
asp.net и взаимодействие страниц


2-1245516025
Nikfel
2009-06-20 20:40
2009.08.16
Как сделать прозрачным главное меню пуск?


15-1245230560
И. Павел
2009-06-17 13:22
2009.08.16
Завершение программы через Halt