2012-05-16 81 views
0

我有以下類,它枚舉本地PC上的所有COM端口,只查找並存儲以給定前綴開頭的友好名稱。枚舉複合設備節點

現在,假設我知道這樣的COM端口是複合設備的一部分,並且複合設備也有一個網絡適配器,我怎麼才能找到與給定設備關聯的網絡適配器?我敢肯定,必須有這樣做(這兩個設備都會有,我認爲相同的父節點)的一個比較簡單的方法,但我不知道非互操作的方法是什麼?誰能幫助?

這裏是類:

/// <summary> 
/// A class to enumerate all COM ports through USB. 
/// </summary> 
public class SerialPortUSB 
{ 

    /// <summary> 
    /// Structure to store a port name and details. 
    /// </summary> 
    public struct PortName 
    { 
     public string Port; 
     public string Fullname; 
     public bool HadPrefix; 
    }; 

    /// <summary> 
    /// Function to return all ports with the given prefix. 
    /// </summary> 
    /// <param name="prefix"></param> 
    /// <returns></returns> 
    static public List<PortName> PortsWithPrefix(string prefix) 
    { 
     List<PortName> ports = new List<PortName>(); 

     try 
     { 
      // Select all COM ports. 

      ManagementObjectSearcher searcher = new ManagementObjectSearcher( "root\\CIMV2", 
                       "SELECT * FROM Win32_SerialPort"); 




      // Now iterate results looking for those that start with the prefix. 

      foreach (ManagementObject item in searcher.Get()) 
      { 
       string friendlyName = (string)item["Caption"]; 

       if (!friendlyName.StartsWith(prefix)) 
       { 
        continue; 
       } 




       // Construct an item for this. 

       PortName name = new PortName(); 

       int start = friendlyName.LastIndexOf('(') + 1, end = friendlyName.LastIndexOf(')'); 

       name.HadPrefix = true; 

       name.Port = friendlyName.Substring(start, end - start); 
       name.Fullname = friendlyName; 

       ports.Add(name); 
      } 
     } 
     catch (ManagementException e) 
     { 
      // Failed to find any... 
     } 




     // Return the list of ports. 

     return ports; 
    } 
} 

回答

0

以爲我會回答我自己的,而不是刪除的問題,以防萬一別人發現答案是有用的。

事實證明,PNPDeviceID,Win32_SerialPorts和Win32_NetworkAdapters中都包含一個屬性,它包含一個設備唯一的ID,所以可以同時識別它們。該解決方案是第一個枚舉串行端口,然後提取PNPDeviceID的獨特之處,然後找到所有網絡適配器是LIKE「%值%」,其中值是PNPDeviceID的一部分。

原來的數量爲兩個相同的,即:

串行端口PNPDeviceID = USB \ VID_17DC & PID_0500 & MI_02 \ 8 & 18F2972 0002"

網絡適配器PNPDeviceID = USB \ VID_17DC & PID_0500 & MI_00 \ 8 & 18F2972 0000「

,其中公共ID是18F2972。