|
Вопрос # 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)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|