如何生成DIDEVICEINSTANCE的guidProduct字段

时间:2014-09-02 11:53:02

标签: winapi hid raw-input directinput setupapi

DirectInput如何在DIDEVICEINSTANCE中为guidProduct字段生成GUID? documentation读取:

  

guidProduct

     

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

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

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

问题:

  1. 是否有API来检索HID(特别是操纵杆)设备的产品GUID?
  2. 如果没有,有没有人知道DirectInput如何合成这个字段? (第一个字段结合了VID和PID。其余的如何?)
  3. 修改

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

0 个答案:

没有答案