C# 如何在.NET中找到具有驱动程序名称的串行端口设备?

C# 如何在.NET中找到具有驱动程序名称的串行端口设备?,c#,.net,serial-port,C#,.net,Serial Port,我有一个通过串口连接到计算机的设备。我知道要在.NET中打开端口,我可以通过COM号码调用端口。比如说 SerialPort s = new SerialPort("COM9"); s.Open(); 在COM9上调用设备。但是,如果我在另一台计算机上运行我的程序和串行端口设备,端口号可能会更改,但每台计算机上的设备名称始终相同。例如,在这张图片中,我想与“Numato Lab 8通道USB中继模块”通信,而不考虑COM端口号(名称始终与端口号相反) 问题是: 我是否会用设备管理器中显示的名

我有一个通过串口连接到计算机的设备。我知道要在.NET中打开端口,我可以通过COM号码调用端口。比如说

SerialPort s = new SerialPort("COM9");
s.Open();
在COM9上调用设备。但是,如果我在另一台计算机上运行我的程序和串行端口设备,端口号可能会更改,但每台计算机上的设备名称始终相同。例如,在这张图片中,我想与“Numato Lab 8通道USB中继模块”通信,而不考虑COM端口号(名称始终与端口号相反)

问题是: 我是否会用设备管理器中显示的名称而不是端口号来调用我的设备,而不是上面的代码?像

SerialPort s = new SerialPort("Numato Lab 8 Channel USB Relay Module");

您必须访问WMI才能获取该信息。您可以使用库以方便访问:

只需创建一个类:

[WMIClass("Win32_PnPEntity")]
public class Device
{
    public string Caption { get; set;}
}
然后查询:

WMIHelper helper = new WMIHelper("root\\CimV2");

Device device = helper.Query<Device>().ToList().Where(p => p.Caption == "Numato Lab 8 Channel USB Relay Module").SingleOrDefault();
WMIHelper helper=new WMIHelper(“root\\CimV2”);
Device Device=helper.Query().ToList()。其中(p=>p.Caption==“Numato Lab 8通道USB中继模块”).SingleOrDefault();
如果要获取更多信息,请向
设备
类添加更多属性。属性应与Win32 Pentity类的WMI规范匹配

获得设备后,可能还需要查询
Win32\u SerialPort
类以了解设备连接的端口。我把这事交给你调查

如果你想自己做所有的工作,这里有一个很大的解释:

可能存在的副本