Ловушка WM_SETFOCUS сообщение - PullRequest
1 голос
/ 26 января 2010

Я хочу перехватывать сообщения WM_SETFOCUS на всех текущих окнах. Какой лучший способ сделать это?

Я думаю, что SetWindowsHookEx может быть использован для этой цели. Может ли он использоваться с WH_CALLWNDPROC или WH_MSGFILTER?

Также упоминается, что процедура подключения должна находиться в отдельной DLL. Это требуется? Могу ли я не иметь процедуру подключения в той же DLL, которая устанавливает ловушку.

Ответы [ 2 ]

1 голос
/ 26 января 2010

Процедура ловушки должна быть в dll, но она не обязательно должна отличаться от той, которую вы используете для установки ловушки. Причина, по которой в документации упоминается «отдельная DLL», заключается в том, что они предполагают, что код для установки ловушки будет находиться в exe, а не в DLL.

Хук WH_CALLWNDPROC должен видеть сообщения WM_SETFOCUS, я бы не ожидал, что хук WH_MSGFILTER их увидит, но я точно не знаю.

Вы должны знать, что если вы намереваетесь съесть сообщения WM_SETFOCUS, это НЕ помешает установить фокус на окно.

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

1 голос
/ 26 января 2010

Да, вы можете иметь процедуру ловушки в той же DLL, которая устанавливает ловушку. Я полагаю, что требование, о котором вы говорите, связано с установкой оконных хуков в другом процессе.

Я не знаком с типом ловушек WH_CALLWNDPROC, но я полагаю, что вы можете использовать WH_CBT, который описан как полезный для приложений "обучения на компьютере", но, похоже, также имеет некоторые довольно полезные функции. Одно из событий, о которых оно уведомлено:

HCBT_SETFOCUS
Окно вот-вот получит фокус клавиатуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...