Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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, а если сложного типа, то передается указатель на область памяти, где лежит само значение переменной.


Наверх

Титульная страница Поиск, карта сайта Написать письмо