2012-09-29 8 views
9

DirectInputからRawInputにゲームパッドの処理のためのアプリケーションを切り替えています。私は各ゲームパッドに人間が解読可能な説明を提示したいと思います。理想は、デバイスマネージャに表示されるデバイステキストですが、USB製品の説明も同様です。どの方法も管理者の許可なしで機能するはずです。RawInput HIDデバイスの人間が読める名前を取得するにはどうすればいいですか?

これまでのところ、私は1つを見つけましたset of cluesHKLM\SYSTEM\CurrentControlSet\Control\MediaProperties\PrivateProperties\Joystick\OEMのレジストリにテキストフィールドがあり、DirectInputの名前と同じであるようです。これは完璧ではありません - 私はデバイスマネージャで英語で表示されるゲームパッドを持っていますが、レジストリにはasと表示されます。

WM_INPUTで提供されているハンドルからデバイスマネージャの説明にアクセスする方法はありますか? HidD_GetProductStringは有望ですが、私はRawInputハンドルからHidトップレベルのコレクションハンドルを取得する方法がわかりません。

編集:私はSETUPAPIから必要な情報を抽出するのに十分であり、デバイスインスタンスパス(例えば\\?\HID#VID_1267&PID_A001#8&1d630df6&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}を、持っている誰もが、この指定されたインスタンス・パスに到達する方法を知っている私がしました

答えて

2

。?同様の問題を持つとされて、私は潜在的な解決策を見つけたと信じています。

あなたがRawInputがuiCommandパラメータの引数としてRIDI_DEVICENAMEGetRawInputDeviceInfoを呼び出すから提供名でCreateFileを呼び出す必要がありそうです。これは、デバイスとのあなたのハンドルを与えますあなたはHidD_GetProductStringと呼ぶことができます。

wchar_t DeviceName[126]; 
HANDLE HIDHandle = CreateFile(RawInputDeviceName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL); 
if(HIDHandle) 
{ 
    BOOLEAN Result = HidD_GetProductString(HIDHandle, DeviceName, sizeof(wchar_t) * 126); 
    CloseHandle(HIDHandle); 
} 

しかし、HidD_GetProductStringが私のシステムで接続されたデバイスの大半に失敗し、唯一の私のUSBキーボードとウェブカメラのための成功するようだと思われます。私のUSBマウスでは成功しません。私はまだこれがなぜであるかはまだ分かっていないが、おそらく私の進歩があなたを助けるだろう。

関連する問題