DirectInput は、DIDEVICEINSTANCE の guidProduct フィールドの GUID をどのように生成しますか? ドキュメントには次のように書かれています。
guid製品
商品の一意の識別子。この識別子は、デバイスの製造元によって確立されます。
DirectInput を使用せずにジョイスティックの製品 GUID を取得または合成する方法を探しています。RawInput を使用してデバイス パスとクラス GUID を正常に取得しましたが、RawInput や SetupDi* 関数を使用して製品 GUID を取得する方法をまだ見つけていません。
MAKELONG(VID, PID) == guidProduct.Data1
探しているうちに、私がやりたいことを実行する方法があることに希望を持てることに気付きました (結局のところ、DirectInput は何とかそれを実行します)。
質問:
- HID (特にジョイスティック) デバイスの製品 GUID を取得する API はありますか?
- そうでない場合、DirectInput がこのフィールドを合成する方法を知っている人はいますか? (最初のフィールドは VID と PID を組み合わせたものです。残りはどうですか?)
編集:
guidProduct フィールドをハックすることで、興味深い発見に出会いました。P880 USB ゲームパッドの製品 GUID の形式は次のとおりです。
010906a3-0000-0000-0000-504944564944
最初の 4 バイトは、明らかにコントローラーの PID と VID です。GUID の最後の部分は、所有しているすべての HID コントローラーに共通です。しばらくすると、それが ASCII 文字であることがわかりました。翻訳は次のとおりです。
010906a3-0000-0000-0000-504944564944
010906a3-0000-0000-0000- P I D V I D
PID_VID_-0000-0000-0000-'P I D"V I D'
SDL2 ゲーム コントローラ データベースを使用してこれを確認したところ、保持されているようです。もちろん、これは bluetooth デバイス (OUYA コントローラーなど) をカバーしていません。これは今のところ小さな問題です。
Bluetoothデバイス用にguidProductがどのように構成されているか知っている人はいますか?