C# 获取电脑USB端口的位置链(几号hub,几号口),例如Port Chain: 1-1-4
时间: 2024-02-23 20:03:10 浏览: 35
可以使用 WMI (Windows Management Instrumentation) 获取 USB 设备的信息,包括端口位置信息。以下是使用 C# 代码获取 USB 设备端口位置链的示例:
```csharp
using System;
using System.Management;
namespace GetUSBPortChain
{
class Program
{
static void Main(string[] args)
{
// 枚举 USB 设备
ManagementObjectCollection collection;
using (var searcher = new ManagementObjectSearcher(@"Select * From Win32_USBControllerDevice"))
collection = searcher.Get();
// 遍历 USB 设备
foreach (var device in collection)
{
// 获取 USB 设备和对应的控制器
var usbDevice = Convert.ToString(device.GetPropertyValue("Dependent"));
var usbController = Convert.ToString(device.GetPropertyValue("Antecedent"));
// 获取 USB 设备的设备 ID
var deviceId = usbDevice.Substring(usbDevice.IndexOf("DeviceID=") + 10).Replace("\"", "");
// 获取 USB 设备的端口位置信息
var portChain = "";
using (var searcher = new ManagementObjectSearcher(@"Select * From Win32_USBHub"))
{
foreach (var hub in searcher.Get())
{
var deviceIdList = (string[])hub.GetPropertyValue("DeviceIDList");
if (Array.IndexOf(deviceIdList, deviceId) >= 0)
{
var portNumber = (uint)device.GetPropertyValue("PortNumber");
portChain = $"-{portNumber}{portChain}";
device = hub;
}
}
}
// 获取 USB 设备所在的控制器的设备 ID
var controllerDeviceId = usbController.Substring(usbController.IndexOf("DeviceID=") + 10).Replace("\"", "");
Console.WriteLine($"Device ID: {deviceId}\n" +
$"Port Chain: {controllerDeviceId}{portChain.Substring(1)}\n");
}
collection.Dispose();
}
}
}
```
代码中,使用 `Win32_USBControllerDevice` 和 `Win32_USBHub` 类来获取 USB 设备和对应的控制器、USB 设备的设备 ID 和端口位置信息。其中,设备 ID 是唯一标识 USB 设备的字符串,端口位置信息由多个数字和短横线组成,例如 `1-1-4` 表示第一个 USB 控制器的第一个端口的第四个设备。