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

Вниз

PostThreadMessage   Найти похожие ветки 

 
RazorbladE ©   (2002-04-30 11:44) [0]

PostThreadMessage ?

Мастера! Q: Как передать при помощи функции PostThreadMessage
ДРУГОМУ приложению (если известно ThreadID того приложения), структуру
данных, как это сделано в ниже приведённом примере (для одного приложения)
с функцией SendMessage:

(Ошибка возникает при попытке "распаковать" данные...)

const
WM_SETCPT = WM_USER + 1;
type
TWmSetCpt = packed record
Msg: Cardinal;
Capt: PcHar;
end;
TForm1 = class(TForm)
.....
procedure Button1Click(Sender: TObject);
private
procedure WmSetCpt(var Message: TWmSetCpt); message WM_SETCPT;
public
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
{ TForm1 }

procedure TForm1.WmSetCpt(var Message: TWmSetCpt);
var Z: ^TWmSetCpt;
begin
Z := Pointer(message.Capt);
ShowMessage(Z.Capt);
end;

procedure TForm1.Button1Click(Sender: TObject);
var x: TWmSetCpt;
begin
x.Capt := PcHar(Caption);
SendMessage(Handle, WM_SETCPT,LongInt(@X), -1);
end;


 
troits ©   (2002-04-30 12:01) [1]

Нет, так нельзя.
Есть много способов передавать данные между процессами.
Один из них - сообщение WM_COPYDATA

Заполняешь 3 поля
tagCOPYDATASTRUCT = packed record
dwData: DWORD;
cbData: DWORD;
lpData: Pointer;
end;
и
SendMessage(
DestWnd, // handle to destination window
WM_COPYDATA, // message to send
WPARAM( Handle), // handle to window (HWND)
LPARAM(@YourCOPYDATASTRUCT));

А в окне - приемнике "ловишь" WM_COPYDATA и извлекаешь из
COPYDATASTRUCT все, что нужно...


 
troits ©   (2002-04-30 12:13) [2]

Прошу прощения - невнимательно прочитал вопрос. WM_COPYDATA должен посылаться только через SendMessage.

Если уж так неужно посылать сообщение через PostMessage, можно ,например, отмаппить (CreateFileMapping / MapViewOfFile) файл, в "передатчике" писать туда данные, post - ить сообщение и в "приемнике" извлекать.



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

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

Наверх




Память: 0.47 MB
Время: 0.013 c
1-88856
Vasya!
2002-06-17 18:32
2002.06.27
Где можно найти инфу, как юзать LISTVIEW?


1-88812
ghost_by
2002-06-16 22:03
2002.06.27
Как проверить: Есть ли в CDROM е компакт?


1-88908
I'm not a lamer not yet a hacker
2002-06-12 13:01
2002.06.27
Прошу мастеров ответить...


3-88717
savc
2002-06-01 12:22
2002.06.27
Как в таблицу(заполнененую) добавить новое поле


7-89054
Remal
2002-04-02 12:35
2002.06.27
Как NTвый taskmanager узнает загрузку процессора....