Я хочу перехватить сообщения, которые отправляются в окно в другом процессе. Каков наилучший способ сделать это? Я не вижу сообщения, когда я использую крюк WH_GETMESSAGE, и я не уверен, могу ли я подклассы между процессами? Любая помощь приветствуется.Как перехватить сообщения, отправляемые в окно?
ответ
Вам необходимо ввести свой собственный код в процесс, которому принадлежат окна, из которых вы хотите перехватить сообщения. К счастью, SetWindowsHookEx()
делает это довольно легко, хотя сначала у вас может быть немного проблем, если вы только использовали его для подключения к процессу до сих пор.
Я могу порекомендовать две отличные статьи по теме:
- Джозефа Newcomber в Hooks and DLLs
- Роберт Кастер-х Three Ways to Inject Your Code into Another Process
Если сообщение отправлено, а не опубликовано WH_GETMESSAGE
, его не будет видно. Вам нужно WH_CALLWNDPROC
. Если вы работаете с процессами, вам понадобится общесистемный крючок в DLL. Вы не упоминаете, как вы вызывали SetWindowsHookEx, поэтому я не знаю, произошло ли ваше зависание, потому что оно не было глобальным, или потому, что сообщение, которое вы искали, было отправлено.
Если вы еще не работали с общесистемными крючками, у меня есть пример общесистемного крючка на моем сайте here. Это клавиатурный крючок, но принцип тот же.
Остановите меня, если я буду непреднамеренно разговаривать здесь - ваш вопрос был настолько коротким, что я не могу сделать вывод о вашем уровне экспертизы. Но возиться с крючками делает imply некоторый опыт ...
Извините, я должен был предоставить более подробную информацию. Я прочитал WH_CALLWNDPROC сообщения, но как я могу удалить сообщение из очереди, используя это? Я хочу, чтобы некоторые сообщения не попадали в целевое окно. –
Затем не передавайте сообщение CallNextHookEx –
Не имеет значения, вызываю ли CallNextHookEx или нет, сообщение всегда достигает целевого окна. :( –
Вам необходимо установить общесистемное сообщение крючок. [Вот учебник] (http://www.codeguru.com/cpp/w-p/system/misc/article.php/c5685). –