DirectInput如何在DIDEVICEINSTANCE中为guidProduct字段生成GUID? documentation读取:
guidProduct
产品的唯一标识符。该标识符由设备制造商建立。
我正在寻找一种在不使用DirectInput的情况下检索或合成操纵杆的产品GUID的方法。我已成功使用RawInput检索设备路径和类GUID,但我还没有找到使用RawInput和/或SetupDi *函数检索产品GUID的方法。
在搜索时,我注意到MAKELONG(VID, PID) == guidProduct.Data1
,这让我有希望有办法做我想做的事(毕竟,DirectInput以某种方式做到了。)
问题:
修改
通过浏览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游戏控制器数据库对此进行了验证,它似乎已成立!当然,这不包括蓝牙设备(例如OUYA控制器),这只是目前的一个小问题。
有谁知道guidProduct是如何为蓝牙设备组成的?