![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SendMessage
_Stalker_ © (2004-08-05 19:19:00)Можно ли, и если да то как, передавать параметр (значение переменной) другому приложению через функцию SendMessage.
Заранее спасибо.
VMcL (2004-08-09 00:48:00) [1]>
Cap := Copy(PChar(PCopyDataStruct(Msg.LParam)^.lpData),1, PCopyDataStruct(Msg.LParam)^.cbData);
KISS:
Cap := String(PChar(PCopyDataStruct(Msg.LParam)^.lpData));
Kirill35 (2004-08-08 23:59:00) [2]для отправки сообщения:
procedure SendMyString(Cap: String);
var CD: TCopyDataStruct;
begin
CD.cbData := Length(Cap)+ 1;
CD.lpData := PChar(Cap);
SendMessage(FindWindow('MyProgram'),WM_COPYDATA, 0, Longint(@CD));
Принимать сообщение
type
TForm1 = class(TForm)
...
...
private
procedure AppMessage(var Msg: TMessage); message WM_COPYDATA;
public
...
...
end;
...
procedure TForm1.AppMessage(var Msg: TMessage);
var Cap: String;
begin
Cap := Copy(PChar(PCopyDataStruct(Msg.LParam)^.lpData),1, PCopyDataStruct(Msg.LParam)^.cbData);
ShowMessage(Cap);
end;
VMcL (2004-08-08 17:28:00) [3]>> RyDmi © (08.08.04 17:24) [10]
Тогда лучше через WM_COPYDATA.
RyDmi (2004-08-08 17:24:00) [4]Скажите плз., а как передать указатель на переменную типа String.
Т.е. мне скажем нужно передать переменную s(тип String), которая находится в передающем приложении, в принимающее приложение. Как мне это сделать, если тип переменных WParam и LParam - Integer?
Stany (2004-08-07 12:19:00) [5]const
WM_MY=WM_USER+1
в обработчике окна пишешь
case msg of
...
WM_MY(твое сообщение):{перехват};
...
end;
_Stalker_ (2004-08-07 12:09:00) [6]А как в принимающем данные окне перехватить посланное ему сообщение сообщение?
Ajax (2004-08-06 11:41:00) [7]Договариваешься с этим другим приложением какое сообщение будет означать получение данных. Либо это будет WM_USER+XXX, либо RegisterWindowMessage, либо что-то еще. В принимающем данные окне перехватываешь это сообщение и значения lParam и wParam этого сообщения будут твои данные, которые ты пошлешь из отправляющего.
_Stalker_ (2004-08-06 11:23:00) [8]
> Ajax ©
Переменная типа байт.
А как организовать приём этой переменной другим приложением, если она отправленна через SendMessage?
Ajax (2004-08-06 08:00:00) [9]Ну можно еще WM_COPYDATA использовать.
KADAN (2004-08-06 00:00:00) [10]
> VMcL © (05.08.04 23:16) [3]
кул!
VMcL (2004-08-05 23:16:00) [11]>> Sergey Masloff (05.08.04 23:04) [2]
А почему бы и нет?
В исходном приложении:SendMessage(hwnd, WM_MINE, GetCurrentProcessID, SomePtr)
А в принимающем:OpenProcess() + ReadProcessMemory(...) + CloseHandle()
;)
Sergey Masloff (2004-08-05 23:04:00) [12]Ajax © (05.08.04 22:56) [1]
>то передается указатель на область памяти
в другое приложение? Лихо.
Ну понятно можно передать скажем позицию в MemoryMappedFile
Ajax (2004-08-05 22:56:00) [13]SendMessage: первый параметр - хендл окна которому отсылаешь сообщение, второй - что именно за сообщение отсылаешь, а третий и четвертый - на твой выбор. Если переменная скажем типа байт, то можно ее передать прямо в 3 или 4 параметре SendMessage, а если сложного типа, то передается указатель на область памяти, где лежит само значение переменной.