Форум: "WinAPI";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.045 c