キーボードが接続されているか切断されているかを判断しようとしています。私は、以下の戦略を試してみました:how to determine keyboard disconnected in DirectInputで示唆されたMSDNに説明したようにRegisterDeviceNotifactionを使用してキーボードが接続/切断されたときのWin32の判断
RegisterDeviceNotification
。私はこれを試したときに、他の情報を提供しないウィンドウコールバックで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のkeyboard sectionも見ていますが、無駄です。
質問
- これを行ったことのある人が成功し、私は右のアプローチを取っている確認することができますか?
- 私は見落としている別の関数またはAPIがありますか?
- 例を挙げたウェブサイト(私はうまくいきませんでした)?
EnumDevices
がコントローラで正しく動作し、キーボードで正しく動作しないのはなぜですか?そして、私はそれを私のキーボードのために働かせますか?
あなたの書式に**少ない** NOISEを使用してください。それはあなたの質問を大胆に混乱させるすべての巨大なフォントで読むのが難しくなります。私は理解できるように物事を静かにした(実際にリスト項目を数えて意味をなさせる)。簡単にあなたの質問を読むことです、より良いあなたのチャンスは、答えを得ることです(と通常、より迅速に、同様に)。 :) –