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

Вниз

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

 
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 вся ветка

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

Наверх





Память: 0.5 MB
Время: 0.008 c
1-98060
maxim2
2002-09-19 12:39
2002.09.30
Есть ли такой компонент, или как сделать...


14-98355
Иван Шихалев
2002-09-05 15:34
2002.09.30
Не поможет ли кто?


14-98282
Елена
2002-09-03 06:25
2002.09.30
Менеджеры закачек


4-98419
oduvan
2002-08-14 08:57
2002.09.30
Добрый день! Вот глюг с кнопками на таск баре. Поможите?


6-98261
net-lamer
2002-07-25 20:41
2002.09.30
Как использовать API-функцию connect?





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