ローカル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;
}
}