c# - 如何在 .NET 中使用其驱动程序名称查找串行端口设备?
问题描述
我有一个通过串口连接到计算机的设备。我知道在 .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 才能获取该信息。您可以使用ORMi库轻松访问:
只需创建一个类:
[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();
如果您想获取更多信息,请向Device
该类添加更多属性。属性应与类的 WMI 规范相匹配Win32_PnPEntity
。
获得设备后,您可能还需要查询Win32_SerialPort
类以了解设备连接的端口。我把它留给你调查。
如果您想自己完成所有工作,这里有一个很大的解释:
推荐阅读
- python - Nose2 无法导入模块,但仅在 docker 中运行时
- firebase - ionic 3上的集成推送firebase通知
- python - Python TypeError:必须是字符串,而不是整数
- sql - Python 3.6 - cx_Oracle 从 SQL Developer 获得不同的输出
- javascript - 如何让我网站上的所有外部链接得到确认
- routing - nopCommerce 4.0 小部件错误 - 找不到您请求的页面
- postgresql - PostgreSQL 错误代码,设置自定义错误代码
- javascript - 在 Angular 5 的帮助下渲染页面时出错
- html - 如何从 html 调用谷歌脚本函数
- c# - c# 字符串常量与静态属性