Как перехватить сообщения, отправляемые в окно? - PullRequest
10 голосов
/ 09 мая 2009

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

Ответы [ 2 ]

11 голосов
/ 09 мая 2009

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

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

  1. Джозеф Ньюкомбер Крючки и DLL
  2. Роберт Кастер Три способа внедрить ваш код в другой процесс
7 голосов
/ 09 мая 2009

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

Если вы раньше не работали с общесистемными хуками, у меня есть пример общесистемного хука на моем сайте здесь . Это клавиатура, но принцип тот же.

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

...