Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
15-1245049036
DelphiN!
2009-06-15 10:57
2009.08.16
Не могу завершить процес пользователя под админской учеткой


15-1245433518
Урсулапов_
2009-06-19 21:45
2009.08.16
Cranberries - Animal Instinct


15-1244884195
Kerk
2009-06-13 13:09
2009.08.16
Как переводится chode?


15-1245161138
@!!ex
2009-06-16 18:05
2009.08.16
Консолька роняет прилоэение на выходе.


2-1244796506
b/@.
2009-06-12 12:48
2009.08.16
Как правильно определять версию файла ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский