3

DirectInput 如何为 DIDEVICEINSTANCE 中的 guidProduct 字段生成 GUID?文档内容如下:

指导产品

产品的唯一标识符。该标识符由设备制造商建立。

我正在寻找一种在不使用 DirectInput 的情况下检索或合成操纵杆的产品 G​​UID 的方法。我已成功使用 RawInput 检索设备路径和类 GUID,但我还没有找到使用 RawInput 和/或 SetupDi* 函数检索产品 GUID 的方法。

在搜索时,我注意到MAKELONG(VID, PID) == guidProduct.Data1,这让我希望有办法做我想做的事(毕竟 DirectInput 以某种方式做到了。)

问题:

  1. 是否有用于检索 HID(尤其是操纵杆)设备的产品 G​​UID 的 API?
  2. 如果没有,有谁知道 DirectInput 如何合成这个字段?(第一个字段结合了 VID 和 PID。其余的呢?)

编辑:

通过对 guidProduct 字段进行破解,我发现了一个有趣的发现。P880 USB 游戏手柄的产品 G​​UID 具有以下格式:

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 是如何为蓝牙设备组成的?

4

0 回答 0