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

Вниз

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

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

Наверх




Память: 0.44 MB
Время: 0.006 c
1-88866
Good Man
2002-06-17 21:29
2002.06.27
Как получить TextRange конкретного фрейма в TWebBrowser?


1-88910
vitek
2002-06-12 19:49
2002.06.27
КАК быть?


1-88841
Cooper
2002-06-17 13:03
2002.06.27
Что такое TSeriesMarkPosition?


1-88876
Olegas
2002-06-13 18:58
2002.06.27
как на форме кнопку CLOSE (крестик) сделать неактивной?


1-88950
Извращенец
2002-06-15 18:13
2002.06.27
Как сделать паузу на определенное время в Delphi ?





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