Я пытаюсь определить, когда моя клавиатура подключена или отключена. Я пробовал следующие стратегии:
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
), контроллер перечисляется только тогда, когда он подключен, что позволяет мне определить состояние его подключения.
Другие функции
Я пробовал:
IDirectInput8::GetDeviceStatus
IDirectInputDevice8::GetCapabilities
IDirectInputDevice8::GetDeviceInfo
IDirectInputDevice8::GetDeviceState
IDirectInputDevice8::Poll
Все функции выполняются успешно и не дают информации о том, подключена ли клавиатура.
Я также просмотрел раздел клавиатуры MSDN , но безрезультатно.
Вопросы
EnumDevices
правильно работает с моим контроллером, но не с моей клавиатурой? И как заставить его работать на моей клавиатуре?