![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]Учимся оформлять вопросы (С) ИШ