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

Вниз

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

 
_Stalker_   (2004-08-05 19:19) [0]

Можно ли, и если да то как, передавать параметр (значение переменной) другому приложению через функцию SendMessage.
Заранее спасибо.


 
Ajax ©   (2004-08-05 22:56) [1]

SendMessage: первый параметр - хендл окна которому отсылаешь сообщение, второй - что именно за сообщение отсылаешь, а третий и четвертый - на твой выбор. Если переменная скажем типа байт, то можно ее передать прямо в 3 или 4 параметре SendMessage, а если сложного типа, то передается указатель на область памяти, где лежит само значение переменной.


 
Sergey Masloff   (2004-08-05 23:04) [2]

Ajax ©   (05.08.04 22:56) [1]
>то передается указатель на область памяти
в другое приложение? Лихо.
Ну понятно можно передать скажем позицию в MemoryMappedFile


 
VMcL ©   (2004-08-05 23:16) [3]

>>Sergey Masloff  (05.08.04 23:04) [2]

А почему бы и нет?

В исходном приложении: SendMessage(hwnd, WM_MINE, GetCurrentProcessID, SomePtr)

А в принимающем: OpenProcess() + ReadProcessMemory(...) + CloseHandle()

;)


 
KADAN ©   (2004-08-06 00:00) [4]


> VMcL ©   (05.08.04 23:16) [3]

кул!


 
Ajax ©   (2004-08-06 08:00) [5]

Ну можно еще WM_COPYDATA использовать.


 
_Stalker_   (2004-08-06 11:23) [6]


> Ajax ©  

Переменная типа байт.
А как организовать приём этой переменной другим приложением, если она отправленна через SendMessage?


 
Ajax ©   (2004-08-06 11:41) [7]

Договариваешься с этим другим приложением какое сообщение будет означать получение данных. Либо это будет WM_USER+XXX, либо RegisterWindowMessage, либо что-то еще. В принимающем данные окне перехватываешь это сообщение и значения lParam и wParam этого сообщения будут твои данные, которые ты пошлешь из отправляющего.


 
_Stalker_   (2004-08-07 12:09) [8]

А как в принимающем данные окне перехватить посланное ему сообщение сообщение?


 
Stany ©   (2004-08-07 12:19) [9]

const
WM_MY=WM_USER+1

в обработчике окна пишешь
case msg of
...
 WM_MY(твое сообщение):{перехват};
...
end;


 
RyDmi ©   (2004-08-08 17:24) [10]

Скажите плз., а как передать указатель на переменную типа String.
Т.е. мне скажем нужно передать переменную s(тип String), которая находится в передающем приложении, в принимающее приложение. Как мне это сделать, если тип переменных WParam и LParam - Integer?


 
VMcL ©   (2004-08-08 17:28) [11]

>>RyDmi ©  (08.08.04 17:24) [10]

Тогда лучше через WM_COPYDATA.


 
Kirill35   (2004-08-08 23:59) [12]

для отправки сообщения:

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-09 00:48) [13]

>Cap := Copy(PChar(PCopyDataStruct(Msg.LParam)^.lpData),1, PCopyDataStruct(Msg.LParam)^.cbData);

KISS:
Cap := String(PChar(PCopyDataStruct(Msg.LParam)^.lpData));



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

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

Наверх




Память: 0.49 MB
Время: 0.057 c
1-1093974231
alberto
2004-08-31 21:43
2004.09.19
Сообщение об ошибке при печати с QReport


1-1093967809
SMT
2004-08-31 19:56
2004.09.19
Самопроизвольное изменение размеров шрифта у компонентов формы


14-1093638335
Yanis
2004-08-28 00:25
2004.09.19
Euphoria


14-1093599887
Igor_thief
2004-08-27 13:44
2004.09.19
RAVE


1-1093863789
Piter
2004-08-30 15:03
2004.09.19
Медленная работа TIniFile