Как попросить хук клавиатуры обрабатывать сообщения ПОСЛЕ родительского окна
Название говорит само за себя. Как я могу попросить свою клавиатуру перехватить входящее сообщение клавиатуры ПОСЛЕ того, как родительское окно обработало их? Читая документы, которые я нашел, есть значение с именем WH_CALLWNDPROCRET
это делает именно это, но мне нужно указать WH_KEYBOARD
там (чтобы сделать это клавиатурным хуком, конечно), и значение не кажется битовым флагом, поэтому я не могу объединить оба.
Справочная информация: я пишу надстройку для Word 2013, которая должна отслеживать определенные ключи и предпринимать соответствующие действия только после того, как Word завершит обработку этих ключей. Я использую проект globalmousekeyhook для подключения.
1 ответ
Библиотека, на которую вы ссылаетесь, подписывается на следующие четыре хука:
- WH_KEYBOARD_LL
- WH_KEYBOARD
- WH_MOUSE_LL
- WH_MOUSE
Когда вы подписываетесь на ловушку, вы предоставляете системе обратный вызов вашего кода, который будет выполняться в соответствии с правилами, различающимися от типа ловушки к типу ловушки. Кроме того, информация, которую обратный вызов доставит вам, должна интерпретироваться по-разному. Эти 4 предоставляют информацию о позициях мыши, нажатиях клавиш и т. Д.
Есть много разных типов хуков, на которые вы можете подписаться. Смотрите: Обзор Крюка
WH_CALLWNDPROCRET
Вы имеете в виду это один из них. Он имеет другое поведение вызова обратного вызова и доставляет вам все сообщения, отправленные в окно. Теоретически они могут включать в себя любое из сотен возможных сообщений, а не только сообщения клавиатуры и мыши.
Ответить на ваш вопрос библиотека globalmousekeyhook
не может подписаться на любые другие хуки, кроме тех, что упомянуты выше.
Хорошей новостью является то, что вы, вероятно, можете повторно использовать код из библиотеки для реализации собственной подписки.
- Вы можете повторно использовать код для установки хука.
- Подпись вашего обратного вызова, конечно, будет отличаться.
- Тогда вы получите все сообщения.
- Отфильтруйте только те сообщения, которые вас интересуют, например,
WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP
, - Интерпретировать данные, доставленные вместе с сообщениями. Также здесь вы можете повторно использовать некоторый код из библиотеки.
Заключение Нет, библиотека не может делать то, что вы ищете. Да, вы можете достичь этого, повторно используя код из этой библиотеки.