【发布时间】:2013-06-26 16:03:15
【问题描述】:
我需要一种方法来获取我正在处理的项目中的 USB 端口(如果存在)的 ID。我们正在尝试做的是通过使用 USB 端口和在我们的应用程序中将一些华硕深度摄像头连接到 Windows 计算机,该应用程序使用这些摄像头来唯一标识摄像头,因为每个摄像头都有一些为其生成的特定信息(一些转换矩阵等),并在我们断开相机并再次将相机重新连接到计算机时为每个相机重新加载此信息。看起来我们用于控制深度传感器 (OpenNI) 的 API 没有提供特定于设备的唯一 ID,因此我们正在考虑使用 USB 端口的 ID,而不是设备的 ID,并专门生成我们的数据使用 USB 端口 ID;这样我们就知道相机应该“如何”定位,例如,如果它连接到“特定”USB端口。
我有两个问题。首先,Windows 系统上的 USB 端口是否有这样的唯一标识符;我们能以某种方式区分不同的USB端口吗? (我有点怀疑,因为它们最终连接了总线。)我的第二个问题是,如果我们可以区分和枚举 USB 端口,我们如何使用 Win32 API 或其他一些库来做到这一点?我遇到了一种叫做“Windows Management Instrumentation”的东西及其相应的类。有一个名为“Win32_USBController”的类,我认为这可能包含我需要的内容,但我不知道如何使用它。所以我转向这里寻求帮助。
提前致谢
【问题讨论】:
-
我猜所有的相机都是相同的型号/品牌?
-
为什么要区分USB端口?我认为你应该区分相机。您可以将它们插入错误的 USB 中,但您仍然想知道它在看什么。
-
所有相机都是相同的型号和品牌,是的。 OpenNI 库提供了一个 ID,但是每次我们将相机连接到不同的端口时,它都会发生变化,因此我们不能完全依赖它。区分相机已经是我们的第一次尝试。如果我们使用端口进行枚举,我们至少可以将相机连接到特定的 USB 端口,因为我们知道该端口是为特定的相机设置保留的。
-
您尝试过设备管理器技巧吗?任何序列号或可见的东西?
-
区分特定相机似乎是个坏主意(TM)。想象一下,如果您不小心将错误的摄像头插入了错误的端口,或者您想稍后扩展系统以包含更多摄像头。它可能要复杂得多,但也许您可以使用一些本地化。例如,使用已知位置的某个已知对象来校准每个摄像机的位置。对于您的特定情况,这可能不是最好的建议,但我认为需要比 USB 端口 ID 更好的东西。