IDirectInputDevice8 Хук клавиатуры - PullRequest
1 голос
/ 27 октября 2008

У нас есть 3D-приложение, которое получает нажатия клавиш с помощью IDirectInputDevice8. Есть ли способ, когда мы извлекаем события клавиатуры через winproc API-интерфейс win32, чтобы мы могли отправить эти команды в DirectInputDevice?

Ответы [ 2 ]

1 голос
/ 27 октября 2008

Windows опрашивает аппаратное обеспечение клавиатуры за кадром. Когда происходят ключевые события, он добавляет соответствующие сообщения WM_ * в вашу очередь сообщений Windows (со связанной информацией о состоянии клавиатуры). Windows Message Pump *1002* извлекает эти сообщения из очереди и обрабатывает их соответствующим образом. Основным преимуществом этого подхода является то, что вам действительно не нужно много делать, чтобы заполучить события клавиатуры (плюс знание знания раскладки клавиатуры / аппаратного обеспечения не требуется). Недостатком является то, что на самом деле это не в режиме реального времени.

Разговор с клавиатурой через DirectInput на самом деле аналогичен, но вы должны сделать опрос. Обычно вы используете DirectInput для настройки устройства клавиатуры, а затем при каждом запуске цикла обновления вы опрашиваете состояние клавиатуры, используя GetDeviceState () . Это зависит от вас, чтобы отслеживать состояние клавиатуры между опросами. Лучше всего создать объект, который обернет эту функциональность и, возможно, запустит события / обратные вызовы или создаст запись команды в очереди в подходящее время, чтобы с ней было удобнее работать. Преимущество этого метода заключается в скорости, поскольку вы напрямую общаетесь с оборудованием и можете мгновенно вызывать обновления. Недостатком является то, что вы должны делать это вручную, что занимает немного времени для настройки и получения правильных результатов.

Посмотрите этот пример о том, как использовать DirectInput для запроса клавиатуры.

Итак, есть несколько ответов на ваш вопрос:

  1. Если у вас уже есть сообщения WM_ *, почему бы просто не вызвать код, который будет вызывать обработка DirectInput, что даст вам те же функциональные возможности?
  2. DirectInput посредством опроса предоставляет вам ту же информацию, что Windows предоставляет вам через сообщения WM_ *. Так что вам не нужно конвертировать или пытаться сопоставить одно с другим. Просто проверьте состояние ключей и обработайте случаи, когда состояние меняется.
  3. Выберите один метод и откажитесь от другого. Они оба делают одно и то же. Я бы порекомендовал использовать DirectInput, если вы хотите скорость и отзывчивость. Если это не так важно, используйте сообщения WM_ *.

Надеюсь, это поможет. Удачи!

0 голосов
/ 27 октября 2008

Команда wndproc отправляет комбинацию этих сообщений о событиях клавиатуры:

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