Передача сообщения в другое окно

Я хотел бы написать приложение, которое передает каждое полученное сообщение в другое окно. Например, у меня есть приложение, в котором пользователь может нажимать некоторые клавиши, наводить на него мышь и т. д., и я хочу, чтобы все эти сообщения передавались, например, в MS Paint.

Как мне это сделать? Любые идеи? Насколько я знаю, может быть проблема с отправкой нажатий клавиш в другое окно, так что тоже прошу совета.

ИЗМЕНИТЬ

Хорошо, может быть, я дам вам более подробное описание того, что я ищу.

Мои приложения отображают на форме окно другого приложения. Теперь я хотел бы управлять другим окном, используя сообщения, отправленные в форму моего приложения (например, нажатия клавиш, движения мыши и т. д.).

Я думал о передаче всех сообщений, которые моя форма получает, в окно приложения, которое я как бы «встраиваю» в свое собственное. Под «встраиванием» я подразумеваю отображение окна приложения в моей форме.

Может есть другое решение моей проблемы. Пожалуйста посоветуй.

Спасибо за уделенное время.


person Pateman    schedule 22.09.2011    source источник
comment
Сообщения мыши и клавиатуры далеко не каждое сообщение.   -  person Ondrej Kelle    schedule 22.09.2011
comment
Я так и думал, поэтому я хотел бы услышать ваши идеи. :)   -  person Pateman    schedule 22.09.2011
comment
Это должно быть какое-то конкретное окно или что-то за вашей формой?   -  person Torbins    schedule 22.09.2011


Ответы (3)


Некоторые сообщения (например, входящие сообщения) поступают через очередь сообщений, а остальные доставляются прямо в окна получателя. Следовательно, то, что вы просите сделать, требует от вас выполнения всех следующих действий:

  1. Реализуйте цикл обработки сообщений верхнего уровня, который извлекает сообщения из очереди и отправляет их в другое приложение.
  2. Переопределите все циклы модальных окон для передачи всех сообщений.
  3. Замените оконную процедуру для всех окон в вашем процессе на ту, которая передает все сообщения другому приложению.
  4. Ищите другие возможности для получения сообщений, которые я не рассмотрел.

Я не могу себе представить, что это действительно будет решением вашей проблемы, какой бы она ни была.

person David Heffernan    schedule 22.09.2011
comment
Мне нравится первая идея, можно подробнее? Есть ли разница между обычным циклом сообщений и циклом верхнего уровня? - person Pateman; 22.09.2011
comment
@Pateman Под циклом сообщений верхнего уровня я имею в виду цикл, который вызывается Application.Run в приложении Delphi. Другие циклы сообщений запускаются, когда вы показываете модальные окна. Я надеюсь, вы знаете о разнице между сообщениями в очереди и не в очереди? Из цикла сообщений можно получить доступ только к сообщениям, находящимся в очереди. Сообщения вне очереди поступают в оконную процедуру каждого окна. - person David Heffernan; 22.09.2011
comment
@Pateman: список Дэвида не был предложениями альтернатив (выберите тот, который вам нравится). Вы должны выполнить все эти действия (как минимум шаги 1–3) и изучить пункт 4. - person Ken White; 22.09.2011

Пересылка сообщений, безусловно, возможна и проста, но, скорее всего, это не сработает так, как вы ожидаете. Посмотрите здесь.

person Mike Kwan    schedule 22.09.2011

Переопределите DefaultHandler() формы и отправляйте каждое полученное сообщение в другую форму. Если в форме есть какие-либо явные обработчики сообщений или даже некоторые элементы управления, вы можете не увидеть эти сообщения в DefaultHandler().

person Jerry Gagnon    schedule 22.09.2011