0

ローカルPC上のすべてのCOMポートを列挙する次のクラスがあり、指定されたプレフィックスで始まるフレンドリ名の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;
    }
}
4

1 に答える 1

0

他の誰かが答えを役に立つと思った場合に備えて、質問を削除するのではなく、自分自身に返信すると思いました。

Win32_SerialPorts と Win32_NetworkAdapters の両方に存在するプロパティである PNPDeviceID には、デバイスに固有の ID が含まれているため、両方を識別することができます。解決策は、最初にシリアル ポートを列挙し、次に PNPDeviceID の一意の部分を抽出してから、値が PNPDeviceID の一部である「%value%」のようなすべてのネットワーク アダプターを見つけることです。

番号は両方で同じであることがわかります。つまり、次のようになります。

シリアル ポート PNPDeviceID = USB\VID_17DC&PID_0500&MI_02\8&18F2972&0&0002"

ネットワーク アダプター PNPDeviceID = USB\VID_17DC&PID_0500&MI_00\8&18F2972&0&0000"

、共通 ID は 18F2972 です。

于 2012-05-16T13:34:15.917 に答える