Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.034 c
1-1094188938
Death
2004-09-03 09:22
2004.09.19
Настройка внутренней сети


14-1093642648
AlexG
2004-08-28 01:37
2004.09.19
Беспроводные наушники


1-1094457300
guest_Dmitry
2004-09-06 11:55
2004.09.19
#$D#$A - что это может быть?


14-1093611245
vkraw
2004-08-27 16:54
2004.09.19
помогите! plz-plz-plz-plz!!! Halcyon


1-1094555125
Koala
2004-09-07 15:05
2004.09.19
Ошибка при выполнении процедуры





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский