我有 4 个 USB 串行转换器 (Prolific) 连接到 USB 集线器。当我查看设备管理器时,我看到动态分配的 Com 编号。但是,将集线器重新插入另一个 USB 端口或系统重新启动后,这些 com 号码有时会发生变化。有没有办法在不手动搜索这些数字的情况下为每个转换器更新这些数字?基本上我想在我的 C# 项目中有一个方法,该方法将为每个转换器寻找一些唯一的 ID,然后获取新的 com 编号。有没有办法做到这一点(尝试了一些 wmi 查询但没有成功)?
今天我想到了一个解决方法。所以我有另一个问题。如何获取有关 USB 集线器的信息?基本上我可以以某种方式找到我的 USB 集线器,然后检索有关连接到集线器端口设备的信息。然后通过 wmi 查询获取这些设备的 com 号码将非常容易。我用 USBView 看到有可能获得这样的信息。我可以看到一棵树从 Root Hub -> Generic USB Hub -> Prolific USB-to-serial Comm Port 开始,但现在如何在代码中实现。有什么想法吗?
最佳答案
很简单,通过使用 win32 本地调用你可以得到,
我只是提供了一部分代码,来帮助你,
var guidComPorts = Guid.Empty;
UInt32 dwSize;
IntPtr hDeviceInfo;
var buffer = new byte[512];
var providerName = new[] { };
var spddDeviceInfo = new SpDevinfoData();
var bStatus = SetupDiClassGuidsFromName("Ports", ref guidComPorts, 1, out dwSize);
if (bStatus)
{
hDeviceInfo = SetupDiGetClassDevs(
ref guidComPorts,
(IntPtr)null,
(IntPtr)null,
DigcfPresent | DigcfProfile);
if (hDeviceInfo.ToInt32() != 0)
{
while (true)
{
spddDeviceInfo.CbSize = Marshal.SizeOf(spddDeviceInfo);// IS IT THIS LINE WORK FOR 64 BIT
bStatus = SetupDiEnumDeviceInfo(hDeviceInfo, nDevice++, ref spddDeviceInfo);
break;
}
}
return;
}
}
使用此代码...
查找友好名称,拆分字符串获取您要查找的确切端口。 我已经完成了它,由于某些保密原因无法在此处提供完整代码,它工作正常。
有关更多信息,请找到此链接
关于c# - 如何区分usb转串口转换器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7367121/