Win32 определяет, когда клавиатура подключена/отключена.

Я пытаюсь определить, когда моя клавиатура подключена или отключена. Я пробовал следующие стратегии:

RegisterDeviceNotification

Использование RegisterDeviceNotifaction, как описано в MSDN, как было предложено в , как определить, что клавиатура отключена в DirectInput. Когда я попробовал это, я получил событие DB_DEVNODES_CHANGEDв обратном вызове окна, которое не предоставляет никакой другой информации (просто какое-то неизвестное устройство изменило состояние подключения). Я пробовал разные GUID для регистрации: 4D36E96B-E325-11CE-BFC1-08002BE10318(на нескольких веб-сайтах указано, что это guid класса для клавиатур) и guidInstance, полученный из IDirectInput8::EnumDevices(DI8DEVCLASS_KEYBOARD, ..., DIEDFL_ATTACHEDONLY). Но я по-прежнему получаю только событие DB_DEVNODES_CHANGED.

IDirectInput8::EnumDevices

Каждый вызов IDirectInput8::EnumDevices(DI8DEVCLASS_KEYBOARD, ..., DIEDFL_ATTACHEDONLY)должен перечислять только подключенные устройства. Однако, когда я отключаю свою клавиатуру, она по-прежнему перечисляется EnumDevices. Когда я делаю то же самое для своего игрового контроллера (с типом DI8DEVCLASS_GAMECTRL), контроллер перечисляется только тогда, когда он подключен, что позволяет мне определить состояние его подключения.

Другие функции

Я пробовал:

  1. IDirectInput8::GetDeviceStatus
  2. IDirectInputDevice8::GetCapabilities
  3. IDirectInputDevice8::GetDeviceInfo
  4. IDirectInputDevice8::GetDeviceState
  5. IDirectInputDevice8::Poll

Все функции выполняются успешно и не дают информации о том, подключена ли клавиатура.

Я также просмотрел раздел клавиатуры MSDN , но безрезультатно.

Вопросы

  1. Может ли кто-нибудь, кто сделал это успешно, подтвердить, что я выбрал правильный подход?
  2. Есть ли другая функция или API, которые я упускаю из виду?
  3. Какие-нибудь веб-сайты, которые приводят пример (я безуспешно гуглил)?
  4. Почему EnumDevicesправильно работает с моим контроллером, но не с моей клавиатурой? И как заставить его работать на моей клавиатуре?

5
задан Community 23 May 2017 в 10:09
поделиться