-
Есть некое оконное Win32 приложение. Запускаем его и получаем процесс A. Хотелось бы при запуске его второй копии (процеесс B) иметь возможность выполнить какую нить функцию в процессе A вызываемую из процесса B.
Как это сделать.
-
Учимся оформлять вопросы (С) ИШ
-
Мои извинения. Отредактировать мессагу не могу. Просто отвлекли когда отправлял. Если есть возможность, исправьте тему на "как вызвать процедуру в запущенном приложении из другого".
-
используй механизм сообщений
-
SendMessage? Хотелось бы PChar просунуть. Описываю структуру, потом ее указатель параметром в Sendmessage отправлять. Так?
-
см. WM_COPYDATA
-
Сенкс.
-
Реализуй в процессе Automation-сервер. Там не то, что PChar, слона просунуть можно.
-
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;
При повторном запусук сообщение второе отправляет мессагу но у первого никаких телодвижений не происходит. Где грабля.
-
> 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.
-
Если я правильно понял то WM_COPYDATA не вариант между двумя независимыми приложениями. Мессага доходит. Из структуры я адрес где был мой PChar и его размер выгребаю. Они совпадают. Но по этому адресу у второго приложения лежит фуфель какой то. Как я понимаю физически приложения работают в разных областях памяти.
-
> Как я понимаю физически приложения работают в разных областях > памяти. Правильно понимаешь, строки не так посылаются.
-
Как послать строку? Хотя в прочем как послать хоть что нить. У меня доходит указанная структура, но я не могу прочитать ничего из того куда она указывает.
Хотя в хелпе написано буквально следующее:
WM_COPYDATA Message
--------------------------------------------------------------------------------
An application sends the WM_COPYDATA message to pass data to another application.
-
> Still Swamp (28.05.08 19:56) [12] > я не могу прочитать ничего из того куда она указывает.
Значит, не так читаете. Почему бы не показать код чтения? Или будем гадать на кофейной гуще?
-
Кстати, о птичках. Если при посылке оба параметра равны нулю (как в коде, который Вы привели), то ЧТО же посылается?
Ничего. Соответственно, и прочитать ничего нельзя. Нечего читать-то.
-
> Still Swamp (28.05.08 19:56) [12]
и все чтоли? больше ничего в хелпе не написано? или ты больше ниасилил?
|