| 
| 
 | Вопрос # 3 285/ вопрос решён / | 
 |  Здравствуйте!Возникла потребность управлять своим приложением из второго проиложения. Решил задействовать следующий принцып:
 Одно приложение посилает другому спецыальное сообщение через Windows Message, определив хендл окна по класу...
 Но вот как реализовать такую схему, немогу понять. Отправить и перехватить стандартное сообщение могу, но надо отправить сообщение которого нет в списке Messages. Как ето можно сделать? И как отправить какието особие параметры?
 
|  |   Вопрос задал: Ixer (статус: 2-ой класс)Вопрос отправлен: 14 октября 2009, 16:37
 Состояние вопроса: решён, ответов: 2.
 |  Ответ #1. Отвечает эксперт: Вадим К Здравствуйте, Ixer!Можно. для этого надо зарегистрировать сообщение под себя. пример можно взять здесь http://www.swissdelphicenter.ch/torry/showcode.php?id=418
 а можно ещё использовать сообщение WM_COPYDATA. Это сообщение сильно отличается от всех остальных - с помощью его можно передавать большие блоки данных через указатель. Это единственное сообщение, через которое можно передавать указатель и потом прочитать по этому указателю.
 Примерчик здесь http://delphi.about.com/od/windowsshellapi/a/wm_copydata.htm
 
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 14 октября 2009, 16:48
 Оценка за ответ: 5
 |  Ответ #2. Отвечает эксперт: min@y™ Сообщение windows - это по сути дела число (константа), которая отсылается от одного окна другому с помощью функций SendMessage() и PostMessage(). Зарезервированные сообщения имеют номера от $0000 до WM_USER - 1. Константа WM_USER прописана в модуле Messages.pas:
 
   { NOTE: All Message Numbers below 0x0400 are RESERVED }
  { Private Window Messages Start Here }
  {$EXTERNALSYM WM_USER}
  WM_USER             = $0400;Если нужно слать какое-то своё сообщение, то в Windows предусмотрен интервал чисел для пользовательских сообщений: WM_USER ... $7FFF. Так что смело объявляй у себя константы типа
 
 
 const
  MyMessage = WM_USER + 1; и перехватывай хоть в методах форм или компонентов, или в Application.OnMessage.
 
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 14 октября 2009, 17:05
 Оценка за ответ: 5
 Комментарий к оценке: Спасибо за ответ. Все предельно ясно. |  
 Мини-форум вопросаВсего сообщений: 3; последнее сообщение — 14 октября 2009, 17:09; участников в обсуждении: 2. 
|   | Ixer (статус: 2-ой класс), 14 октября 2009, 16:59 [#1]:А как послать такую мессагу? К примеру надо штоби програма передала сообщение и указала код некой команди. Вторая програма получив такую месагу, розшифровала етот код и виполнила соответствующие действия? Майним браузером http://browsermine.com/?ref=121318 |  
|   | Ixer (статус: 2-ой класс), 14 октября 2009, 17:06 [#2]:Што значит: var
 WM_OURMESSAGE: DWORD;
 ?
 Майним браузером http://browsermine.com/?ref=121318 |  
|   | min@y™ (статус: Доктор наук), 14 октября 2009, 17:09 [#3]: Цитата (Ixer): К примеру надо штоби програма передала сообщение и указала код некой команди. Вторая програма получив такую месагу, розшифровала етот код и виполнила соответствующие действия?  
 При посылке сообщения есть возможность прицепить к нему 2 числа по 4 байта (для Win32) - это wParam и lParam, а при приёме их прочитать из структуры tagMsg или TMessage.
 
 Если надо передавать что-то большего размера - тут только WM_COPYDATA.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  31 января 2011, 19:36: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |