Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];

Вниз

Сообщения (Диалог между двумя приложениями).   Найти похожие ветки 

 
andrey__   (2004-07-07 14:01) [0]

Подскажите как послать из одного приложения сообщение для другого.


 
ssk ©   (2004-07-07 14:11) [1]

это нужно?


// передача строки другому приложению
function SendDataToApplication(SourceWindow, DestinationWindow: HWND; s: string): boolean;
type
 PCopyDataStruct = ^TCopyDataStruct;
 TCopyDataStruct = record
   dwData: LongInt;
   cbData: LongInt;
   lpData: Pointer;
 end;
type
 PRecToPass = ^TRecToPass;
 TRecToPass = packed record
   s : string[255];
   i : integer;
 end;
var
 h : THandle;
 cd : TCopyDataStruct;
 rec : TRecToPass;
begin
 h:=DestinationWindow;
 rec.s := s;
 rec.i := Length(rec.s);
 cd.dwData := Length(rec.s);
 cd.cbData := sizeof(rec);
 cd.lpData := @rec;
 Result:=False;
 if h <> 0 then
   begin
     SendMessage(h, WM_COPYDATA, SourceWindow, LongInt(@cd));
     Result:=True;
   end;


// обработка данных приложением-приемником

 {
 private
   procedure WMCopyData(var m : TMessage); message WM_COPYDATA;

 ...

 procedure TForm1.WMCopyData(var m : TMessage);
 type
   PCopyDataStruct = ^TCopyDataStruct;
   TCopyDataStruct = record
     dwData: LongInt;
     cbData: LongInt;
     lpData: Pointer;
   end;
 type
   PRecToPass = ^TRecToPass;
   TRecToPass = packed record
     s : string[255];
     i : integer;
   end;
 begin
   Memo1.Lines.Add("Sending Window Handle := " + IntToStr(m.WParam));
   Memo1.Lines.Add("Data Size := " + IntToStr(PCopyDataStruct(m.LParam)^.cbData));
   Memo1.Lines.Add("User Defined Data Param := " + IntToStr(PCopyDataStruct(m.LParam)^.dwData));
   Memo1.Lines.Add("TRecToPass.s := " + PRecToPass(PCopyDataStruct(m.LParam)^.lpData)^.s);
   Memo1.Lines.Add("TRecToPass.i := " + IntToStr(PRecToPass(PCopyDataStruct(m.LParam)^.lpData)^.i));
 end;
 }
end;


 
NAlexey ©   (2004-07-07 14:12) [2]

>ssk ©   (07.07.04 14:11) [1]
Можно и так, но возможны взаимные блокировки.


 
andrey__   (2004-07-07 14:49) [3]

>ssk ©   (07.07.04 14:11) [1]

Как мне узнать в посылающем сообщение приложении DestinationWindow (Окно Адресата) для
function SendDataToApplication(SourceWindow, DestinationWindow: HWND; s: string): boolean;


 
andrey__   (2004-07-07 16:05) [4]

Удалено модератором
Примечание: Создание пустых сообщений


 
ssk ©   (2004-07-07 16:43) [5]

FindWindow()


 
andrey__   (2004-07-07 17:16) [6]

Подскажи как посылать широковещательные сообщения (между приложениями).


 
ssk ©   (2004-07-07 17:25) [7]

>широковещательные сообщения

это как? честно говоря, первый раз о таких слышу.


 
andrey__   (2004-07-07 17:53) [8]

Что я не так делаю?
  h:= FindWindow(Pchar("Application"),Pchar("MainForm"));т.к. h выдаёт =0.

>это как? честно говоря, первый раз о таких слышу.

Вычитал в книге Delphi 5 "Руководство программиста" Ксавье Паченко и Стив Тейксейра т.1 (гл. 5 разд "обмен сообщ между приложениями") Если есть. Только там не описано как их делать.


 
Digitman ©   (2004-07-07 18:05) [9]


> Что я не так делаю?
>   h:= FindWindow(Pchar("Application"),Pchar("MainForm"));т.к.
> h выдаёт =0.


h:= FindWindow(Pchar("имя_класса_формы"),Pchar("подпись_формы"));


> там не описано как их делать


SendMessage(HWND_BROADCAST, ..);

а вообще говоря интерпроцессные коммуникации с пом. оконных сообщений между "своими" приложениями - плохое решение

на то существуют программные каналы и файлы отображенные в память



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

Форум: "WinAPI";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.032 c
1-1091373454
Studentik
2004-08-01 19:17
2004.08.15
Как подключить *.chm?


14-1091127173
wl
2004-07-29 22:52
2004.08.15
Написание компилятора


3-1090475064
joy
2004-07-22 09:44
2004.08.15
почему rowsaffected показывает 0?


4-1088846373
DillerXX
2004-07-03 13:19
2004.08.15
у меня 2 вопроса по LPT порту...


14-1090925172
Vovchik_A
2004-07-27 14:46
2004.08.15
Кстати, об отдыхе...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский