Форум: "Основная";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c