2009-05-09 2 views
10

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

+0

Вам необходимо установить общесистемное сообщение крючок. [Вот учебник] (http://www.codeguru.com/cpp/w-p/system/misc/article.php/c5685). –

ответ

11

Вам необходимо ввести свой собственный код в процесс, которому принадлежат окна, из которых вы хотите перехватить сообщения. К счастью, SetWindowsHookEx() делает это довольно легко, хотя сначала у вас может быть немного проблем, если вы только использовали его для подключения к процессу до сих пор.

Я могу порекомендовать две отличные статьи по теме:

  1. Джозефа Newcomber в Hooks and DLLs
  2. Роберт Кастер-х Three Ways to Inject Your Code into Another Process
7

Если сообщение отправлено, а не опубликовано WH_GETMESSAGE, его не будет видно. Вам нужно WH_CALLWNDPROC. Если вы работаете с процессами, вам понадобится общесистемный крючок в DLL. Вы не упоминаете, как вы вызывали SetWindowsHookEx, поэтому я не знаю, произошло ли ваше зависание, потому что оно не было глобальным, или потому, что сообщение, которое вы искали, было отправлено.

Если вы еще не работали с общесистемными крючками, у меня есть пример общесистемного крючка на моем сайте here. Это клавиатурный крючок, но принцип тот же.

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

+1

Извините, я должен был предоставить более подробную информацию. Я прочитал WH_CALLWNDPROC сообщения, но как я могу удалить сообщение из очереди, используя это? Я хочу, чтобы некоторые сообщения не попадали в целевое окно. –

+0

Затем не передавайте сообщение CallNextHookEx –

+0

Не имеет значения, вызываю ли CallNextHookEx или нет, сообщение всегда достигает целевого окна. :( –