2015-11-26 2 views
0

В названии говорится все. Как я могу попросить клавиатурный крючок заняться входящим сообщением клавиатуры ПОСЛЕ того, как родительское окно обработало их? Чтение docs Я обнаружил, что есть значение с именем WH_CALLWNDPROCRET, которое делает именно это, но мне нужно указать WH_KEYBOARD там (чтобы сделать его клавиатурным крючком, конечно), и значение не похоже на бит, поэтому я могу Совместите оба.Как запросить клавиатурный крючок для обработки сообщений ПОСЛЕ родительского окна

фон: Я пишу надстройку для слова 2013, который должен контролировать определенные ключи и принять соответствующие меры только после того, как Слова закончит обработку этих ключей. Я использую проект globalmousekeyhook для подключения.

+1

Звучит как действительно хакерский способ обойти это. Я уверен, что объектная модель Word вызывает события, которые вам необходимо регистрировать и отвечать, вместо того, чтобы идти по пути от кодового совпадения, и предположить, что некоторые вводные клавиши запускают некоторые действия. Вне отладчиков трудно установить крючок. – IInspectable

+1

@Inspectable: Спасибо за ввод. Я не новичок в разработке Office. Это одна из ключевых (и известных) проблем, которые Word Object Model не вызывает каких-либо событий для KeyPress (лучшее, что мы получаем, это событие WindowSelectionChanged, но это совсем другая история). Крюки кажутся единственным способом для такого рода вещей на сегодняшний день. См., Например, ответ на [этот вопрос SO] (http://stackoverflow.com/questions/13230652/how-to-trap-keypress-event-in-msword-using-vsto). – dotNET

ответ

0

Библиотека вы имеете в виду подписывается на следующие четыре крючка:

  • WH_KEYBOARD_LL
  • WH_KEYBOARD
  • WH_MOUSE_LL
  • WH_MOUSE

При подписке на крючке вы даете система обратного вызова к вашему коду, который будет выполняться в соответствии с правилами, которые отличаются от типа крюка до h ook type. Также информация, которую обратный вызов будет доставлять вам, должна интерпретироваться по-разному. Эти 4 предоставляют информацию о положениях мыши, нажатия клавиш и т. Д.

Существует множество различных типов крючков, на которые вы можете подписаться. См .: Hook Overview

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

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

Хорошая новость заключается в том, что вы можете, вероятно, повторно использовать код из библиотеки, чтобы реализовать свою собственную подписку.

  • Вы можете использовать код для установки крюка.
  • Подпись вашего обратного вызова, конечно, будет отличаться.
  • Тогда вы получите все сообщения.
  • Отфильтруйте только те сообщения, которые вас интересуют, например. WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP.
  • Интерпретировать данные, доставленные вместе с сообщениями. Также здесь вы можете повторно использовать некоторый код из библиотеки.

Заключение Нет, библиотека не может делать то, что вы ищете. Да, вы, вероятно, можете достичь этого, повторно используя код из этой библиотеки.

+0

Спасибо. Вы обобщили это хорошо (хотя не то, что я хотел услышать, lol). Посмотрим, смогу ли я собрать достаточное количество убеждений и времени, чтобы пройти путь, который вы показали. :) – dotNET

Смежные вопросы