【问题标题】:Best way to determine VCP COM port in .net 3.5在 .net 3.5 中确定 VCP COM 端口的最佳方法
【发布时间】:2015-12-01 15:29:29
【问题描述】:

我有几个不同的设备通过 VCP 连接,我需要使用 C# 确定它们所在的端口。这对于跟踪目的也很重要。如果设备被拔掉再重新插入或暂时断电,有时 COM 端口会发生变化。

我正在寻找一种可靠的方法来确定这一点。目前,我发现的最佳方法是使用 PID 定位设备并从设备名称解析 COM 端口,即

    public static bool IsDevice ( ManagementObject Device, string PID ) {
        try {
            return new Regex ( string.Format ( @"USB\\VID_[^&]+&PID_{0}\\.*", PID ) ).IsMatch ( ( string ) Device["DeviceID"] );
        } catch ( Exception ) {
            return false;
        }
    }

    public static string GetVCP_COMPort ( ManagementObject Device ) {
        try {
            return new Regex ( @".*\((COM[0-9]+)\).*" ).Match ( ( string ) Device["Name"] ).Groups[1].Value;
        } catch ( Exception e ) {
            return string.Empty;
        }
    }

...

var searcher = new ManagementObjectSearcher ( "Select * from Win32_PnPEntity" );
var coll = searcher.Get ();

foreach ( ManagementObject o in coll )
    if ( IsDevice ( o, PID ) ) {
        var port = new SerialPort ( GetVCP_COMPort ( o ) );
    }

我对查找设备的方法(即IsDevice)非常满意,但是从设备名称解析 COM 端口看起来容易出错 - 如果设备没有遵循 @ 的确切模式的名称,则很容易损坏987654324@.

有没有更好的办法?

【问题讨论】:

    标签: c# .net windows


    【解决方案1】:

    看起来唯一需要做的就是改进您的 WMI 搜索查询。那么 DeviceID 就是 COM 端口。

    var searcher = new ManagementObjectSearcher ( string.Format ( "select DeviceID from Win32_SerialPort where PnPDeviceID like '%PID_{0}%'", PID ) );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 2011-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多