Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.022 c
1-1094110657
dimon1979
2004-09-02 11:37
2004.09.19
Курсор


1-1093958777
TSa
2004-08-31 17:26
2004.09.19
Адресная книга


3-1092913938
V-A-V
2004-08-19 15:12
2004.09.19
Контейнер для хранения тексов SQL запросов


4-1091787305
Dmitry V. Averuanov
2004-08-06 14:15
2004.09.19
Получить информацию, аналогичную Application.EXEName


1-1094119034
вразлет
2004-09-02 13:57
2004.09.19
В чем м.б. лажа?




   Наверх