Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 285

Раздел: Delphi » Прочее
/ вопрос решён /

Здравствуйте!
Возникла потребность управлять своим приложением из второго проиложения. Решил задействовать следующий принцып:
Одно приложение посилает другому спецыальное сообщение через Windows Message, определив хендл окна по класу...
Но вот как реализовать такую схему, немогу понять. Отправить и перехватить стандартное сообщение могу, но надо отправить сообщение которого нет в списке Messages. Как ето можно сделать? И как отправить какието особие параметры?

Ixer Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: 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

Ixer (статус: 2-ой класс), 14 октября 2009, 16:59 [#1]:

А как послать такую мессагу? К примеру надо штоби програма передала сообщение и указала код некой команди. Вторая програма получив такую месагу, розшифровала етот код и виполнила соответствующие действия?
Майним браузером http://browsermine.com/?ref=121318
Ixer

Ixer (статус: 2-ой класс), 14 октября 2009, 17:06 [#2]:

Што значит:
var
WM_OURMESSAGE: DWORD;
?
Майним браузером http://browsermine.com/?ref=121318
min@y™

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)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:43
Выполнено за 0.02 сек.