Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.30;
Скачать: CL | DM;

Вниз

Каким образом лучшее всего передать инфо из проги в прогу?   Найти похожие ветки 

 
oduvan ©   (2002-08-13 16:12) [0]

Каким образом лучшее всего передать инфо из проги в прогу?

Если Messaga"ми, то как передать текстовую строку (string или PCHAR), я так понял, что нужно зоздавать свой Тип Мессаджа там WM_USER+NNN. Поможите мастаки!


 
MBo ©   (2002-08-13 16:13) [1]

wm_copydata


 
Alx2 ©   (2002-08-13 16:29) [2]

>MBo © (13.08.02 16:13)
Местами встречаются интересные казусы с этим wm_copydata.


 
Игорь Шевченко ©   (2002-08-13 16:31) [3]

Через MMF, к примеру


 
MBo ©   (2002-08-13 16:42) [4]

>Alx2
Большой практики нет. Какие?


 
Alx2 ©   (2002-08-13 16:48) [5]

>MBo © (13.08.02 16:42)
На вскидку:
Function ShellProc(nCode: Integer; WPARAM, LPARAM: Integer): Integer; Stdcall;
Var
CBTCreateWnd: PCBTCreateWnd Absolute LPARAM;
Str : String;
DataStruct : TCOPYDATASTRUCT;

Begin
Result := CallNextHookEx(hhk, nCode, WPARAM, LPARAM);
If nCode = hcbt_ACTIVATE
Then
Begin
MyWindow := FindWindow("TWatcherForm", "WatcherForm");
Str := CBTCreateWnd^.lpCs^.lpszClass; // - накрывается при таком подходе (используем переданный класс).
with DataStruct do
begin
dwData := wParam;
cbData := Length(Str)+4;
lpData := Pointer(Str);
end;
SendMessage(MyWindow, WM_CopyData, 8101973, Integer(@DataStruct));
End;
End;

А так - работает

Function ShellProc(nCode: Integer; WPARAM, LPARAM: Integer): Integer; Stdcall;
Var
CBTCreateWnd: PCBTCreateWnd Absolute LPARAM;
Str : String;
DataStruct : TCOPYDATASTRUCT;

Begin
Result := CallNextHookEx(hhk, nCode, WPARAM, LPARAM);
If (nCode = hcbt_ACTIVATE Then
Begin
MyWindow := FindWindow("TWatcherForm", "WatcherForm");
SetLength(Str,255);
GetClassName(wParam,PChar(Str),255); // Класс окна получаем заново, не используя переданное
Str := PChar(Str);
with DataStruct do
begin
dwData := wParam;
cbData := Length(Str)+4;
lpData := Pointer(Str);
end;
SendMessage(MyWindow, WM_CopyData, 8101973, Integer(@DataStruct));
End;
End;

Подробнее завтра воспроизведу.
Пишу второпях уже, могу поднагнать, как обычно :))


 
Игорь Шевченко ©   (2002-08-13 16:59) [6]

Alx2 © (13.08.02 16:48)

Нда...


 
Alx2 ©   (2002-08-13 17:03) [7]

>Игорь Шевченко © (13.08.02 16:59)
А конкретнее?


 
Игорь Шевченко ©   (2002-08-13 17:15) [8]

ShellProc и MyWindow в одном процессе ?


 
Alx2 ©   (2002-08-13 17:17) [9]

Нет.


 
Игорь Шевченко ©   (2002-08-13 17:24) [10]

Зачем такие заморочки со строками ?
И зачем +4 у cbData ?

И что на приемной стороне ?


 
Alx2 ©   (2002-08-13 17:33) [11]

>Игорь Шевченко © (13.08.02 17:24)
4 байта - потому-что строка.

А заморочки такие давно канули в лету. Просто сам факт остался непонятым. То что это можно обойти - само собой. Но тут уже дело в принципе.



 
Alx2 ©   (2002-08-13 17:36) [12]

Забыл про обратную сторону:

Procedure TWatcherForm.onCopyData(Var Msg: TMessage);

Var
wProcessID: DWORD;
S: String;
ID: Integer;
Begin
<что-то обрабатываем и инициализируем>
Memo1.Lines.Add(DateTimeToStr(Now) + "> " + GetExeName(wProcessID) + " (" +
IntToStr(wProcessID) + "): " +
String(PCopyDataStruct(Msg.LPARAM)^.lpData)); // используем переданный string
End;
End;



 
Игорь Шевченко ©   (2002-08-13 17:39) [13]

А так:

MyWindow := FindWindow("TWatcherForm", "WatcherForm");
with DataStruct do begin
dwData := wParam;
cbData := StrLen(CBTCreateWnd^.lpCs^.lpszClass)+1;
lpData := CBTCreateWnd^.lpCs^.lpszClass;
end;
SendMessage(MyWindow, WM_CopyData, 8101973, Integer(@DataStruct));

А на приемной стороне как сейчас...


 
cdaDmitriy ©   (2002-08-13 17:40) [14]

Alx2 © Так это 2 процесса ???


 
Alx2 ©   (2002-08-13 17:44) [15]

>cdaDmitriy © (13.08.02 17:40)
Да. И даже больше
>Игорь Шевченко © (13.08.02 17:39)
Ну в этом случае чистый pchar просто передаем.
А затык был именно на разнице между
Str := CBTCreateWnd^.lpCs^.lpszClass;
и
SetLength(Str,255);
GetClassName(wParam,PChar(Str),255); // Класс окна получаем заново, не используя переданное
Str := PChar(Str);



 
Alx2 ©   (2002-08-13 17:48) [16]

>Игорь Шевченко © (13.08.02 17:39)
Извини, невнимательно посмотрел. По-моему так тоже пробовал. Траблы оставались.


 
Игорь Шевченко ©   (2002-08-13 17:49) [17]

Alx2 © (13.08.02 17:44)

Насколько я понял и надо передавать именно PChar из которого на приемной строне String делается.
Я не признаю такого рода заморочки с AnsiString, уж больно чреваты они подводными камнями.


 
Alx2 ©   (2002-08-13 18:05) [18]

Попробовал еще раз :)
Все сдохло моментально ...


 
Игорь Шевченко ©   (2002-08-13 18:13) [19]

Alx2 © (13.08.02 18:05)

Сдохло при передаче или при приеме ? (я, кстати, в аську стукнул)


 
cdaDmitriy ©   (2002-08-13 18:36) [20]

Игорь Шевченко © (13.08.02 16:31)
Через MMF, к примеру

Что имеешь в виду расшифруй



 
Игорь Шевченко ©   (2002-08-13 18:41) [21]

cdaDmitriy © (13.08.02 18:36)

MMF - Memory mapped files


 
cdaDmitriy ©   (2002-08-13 18:42) [22]

Это понятно ну а дальше


 
Игорь Шевченко ©   (2002-08-13 18:47) [23]

cdaDmitriy © (13.08.02 18:42)

Дальше - Program Files/Borland/Delphi/Demos/IPCDemos/*.*


 
wal ©   (2002-08-14 14:22) [24]

А еще можно использовать DDE


 
cdaDmitriy ©   (2002-08-14 14:26) [25]

>>wal © (14.08.02 14:22)
>A еще можно использовать DDE

OLE ,COM, DCOM, ActiveX и так далее ....



 
Garrison   (2002-08-15 17:47) [26]

А Memory Mapped Files не пробовали?



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

Текущий архив: 2002.09.30;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.02 c
1-98210
Андрусь
2002-09-18 12:39
2002.09.30
как по виндовскому Handlу получить pointer на объект


1-98046
qube
2002-09-18 17:22
2002.09.30
MapInfo


1-98185
Steven
2002-09-18 10:42
2002.09.30
Как установить кодировку перед копированием в буфер?


3-97987
MeryF
2002-09-09 16:33
2002.09.30
Вопрос по работе с DBGrid


7-98368
Леденцов Дима
2002-07-19 20:16
2002.09.30
Как мне подключать эти формы из DLL