Winapi 有没有办法通过Win32 API获取USB端口ID?

Winapi 有没有办法通过Win32 API获取USB端口ID?,winapi,usb,wmi,openni,Winapi,Usb,Wmi,Openni,我需要一种方法来获取USB端口的ID(如果它们存在的话)在我的项目工作。我们正试图通过USB端口将一些华硕深度摄像头连接到Windows计算机,在我们的应用程序中,利用这些摄像头,唯一地识别一个摄像头,因为每个摄像头都有一些为其生成的特定信息(一些变换矩阵等),并为每个摄像头重新加载这些信息,当我们再次断开并重新将摄像头连接到计算机时。看起来我们用于控制深度传感器(OpenNI)的API没有提供特定于设备的唯一ID,因此我们考虑使用USB端口的ID,而不是设备,并专门使用USB端口ID生成数据;

我需要一种方法来获取USB端口的ID(如果它们存在的话)在我的项目工作。我们正试图通过USB端口将一些华硕深度摄像头连接到Windows计算机,在我们的应用程序中,利用这些摄像头,唯一地识别一个摄像头,因为每个摄像头都有一些为其生成的特定信息(一些变换矩阵等),并为每个摄像头重新加载这些信息,当我们再次断开并重新将摄像头连接到计算机时。看起来我们用于控制深度传感器(OpenNI)的API没有提供特定于设备的唯一ID,因此我们考虑使用USB端口的ID,而不是设备,并专门使用USB端口ID生成数据;这样我们就知道相机应该如何定位,例如,如果它连接到一个“特定”的USB端口

我这里有两个问题。首先,Windows系统上的USB端口是否具有此类唯一标识符;我们能以某种方式区分不同的USB端口吗?(我对此有点怀疑,因为它们最终是通过总线连接的。)我的第二个问题是,如果我们能够区分和枚举USB端口,我们如何使用Win32 API或其他库来做到这一点?我遇到了一个叫做“Windows管理工具”的东西及其相应的类。有一个名为“Win32_USBController”的类,我认为它可能包含我需要的内容,但我不知道如何使用它。所以我转向这里寻求帮助


提前感谢

我唯一能提出的建议是,在没有看到您的相机或不知道它们是什么型号的情况下,将它们全部插入,打开设备管理器,在那里找到这些相机,切换到“详细信息”选项卡,然后查找属性,这对于所有相机都是不同的


之后,您应该到处搜索它的文档。

我想所有摄像头都是相同的型号/品牌?为什么要区分USB端口?我认为你应该区分照相机。你可以将它们插入错误的USB,但你仍然想知道它在看什么。所有的相机都是同一型号和品牌的,是的。OpenNI库提供了一个ID,但是每次我们将相机连接到不同的端口时,这个ID都会改变,所以我们不能完全依赖它。区分摄像机是我们的第一次尝试。如果我们使用端口枚举,我们至少可以通过知道此端口是为特定的相机设置保留的,将相机连接到特定的USB端口。您尝试过设备管理器技巧吗?任何序列号或可见的东西?区分特定的摄像头似乎是个坏主意(TM)。想象一下,如果您不小心将错误的摄像头插入了错误的端口,或者您希望以后扩展系统以包含更多摄像头。这可能要复杂得多,但也许你可以使用一些本地化。例如,使用已知位置的某个已知对象来校准每个摄影机的位置。对于您的特定情况,这可能不是最好的建议,但我认为需要比USB端口ID更好的东西。