2015-12-01 75 views
0

我有幾個由VCP連接的不同設備,我需要確定它們使用C#的端口。跟蹤目的也很重要。如果設備被拔出並重新插入或暫時斷電,有時COM端口將會改變。確定.net 3.5中VCP 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端口看起來很容易出錯 - 如果設備沒有遵循Device Name (COMXY)確切模式的名稱,很容易中斷。

有沒有更好的方法?

回答

0

看起來好像唯一需要的就是改進您的WMI搜索查詢。然後DeviceID將成爲COM端口。

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