在 C# 中,你可以使用 ManagementObjectSearcher
类通过 Windows Management Instrumentation (WMI) 查询设备信息,包括 USB 设备信息。ManagementObjectSearcher
提供了一种方式来查询系统中的各种硬件设备,并获取其详细信息。
如果你想要查询 USB 设备,可以利用 Win32_USBHub
类来获取连接到计算机上的所有 USB 设备。可以通过 ManagementObjectSearcher
执行 SQL 样式的查询语句,获取与 USB 设备相关的信息。
获取 USB 设备信息的基本步骤:
- 引入相关命名空间:
需要引用System.Management
命名空间,以便能够访问 WMI 服务。using System; using System.Management;
- 使用
ManagementObjectSearcher
执行查询:ManagementObjectSearcher
可以用来查询系统中的设备信息。在查询 USB 设备时,常用的 WMI 类是Win32_USBHub
和Win32_PnPEntity
。
代码示例:
using System;
using System.Management;
class Program
{
static void Main()
{
// 查询所有 USB 设备信息
string query = "SELECT * FROM Win32_USBHub";
// 创建 ManagementObjectSearcher 对象,并传入查询语句
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
// 遍历查询结果并输出信息
foreach (ManagementObject usbDevice in searcher.Get())
{
// 输出 USB 设备的相关信息
Console.WriteLine("DeviceID: " + usbDevice["DeviceID"]);
Console.WriteLine("PNPDeviceID: " + usbDevice["PNPDeviceID"]);
Console.WriteLine("Description: " + usbDevice["Description"]);
Console.WriteLine("DeviceID: " + usbDevice["DeviceID"]);
Console.WriteLine("-------------------------------");
}
}
}
代码解释:
SELECT * FROM Win32_USBHub
:- 这是一个 WMI 查询语句,获取所有连接到系统的 USB 设备的信息。
Win32_USBHub
类包含了 USB 集线器的信息。
ManagementObjectSearcher
:ManagementObjectSearcher
执行查询并返回符合条件的对象集合(ManagementObjectCollection
)。
foreach (ManagementObject usbDevice in searcher.Get())
:- 遍历查询到的所有 USB 设备,并提取相关信息。
usbDevice["Description"]
、usbDevice["DeviceID"]
等:- 这些是 WMI 查询结果的字段,通过它们你可以访问设备的具体属性,例如
DeviceID
、PNPDeviceID
等。
- 这些是 WMI 查询结果的字段,通过它们你可以访问设备的具体属性,例如
常用的 WMI 类和属性
Win32_USBHub
:Description
:设备描述。DeviceID
:设备唯一标识符。PNPDeviceID
:即设备的 PnP(即插即用)ID。
Win32_PnPEntity
:- 该类提供了关于系统中所有即插即用设备的信息,包括 USB 设备。你可以使用它来获取更多详细信息,如设备名称、状态等。
使用 Win32_PnPEntity
查询所有 USB 设备
你也可以使用 Win32_PnPEntity
来查询所有的即插即用设备(包括 USB 设备)。此方法可以为你提供更详细的信息。
using System;
using System.Management;
class Program
{
static void Main()
{
// 查询所有即插即用设备,包括 USB 设备
string query = "SELECT * FROM Win32_PnPEntity WHERE Caption LIKE '%USB%'";
// 创建 ManagementObjectSearcher 对象
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
// 遍历查询结果并输出信息
foreach (ManagementObject device in searcher.Get())
{
Console.WriteLine("Device Name: " + device["Caption"]);
Console.WriteLine("Device ID: " + device["DeviceID"]);
Console.WriteLine("Status: " + device["Status"]);
Console.WriteLine("-------------------------------");
}
}
}
其他常用的 WMI 查询
- 查询所有 USB 设备(包括 USB 存储设备等):
string query = "SELECT * FROM Win32_PnPEntity WHERE Description LIKE 'USB%'";
- 查询当前连接的所有 USB 存储设备:
string query = "SELECT * FROM Win32_DiskDrive WHERE MediaType='Removable Media'";
错误处理与权限
- 需要确保程序具有足够的权限来访问 WMI 服务。一般情况下,查询设备信息需要管理员权限。
- 如果程序没有适当权限,可能会抛出
AccessDeniedException
,这时需要以管理员身份运行程序。
总结
- 使用
ManagementObjectSearcher
可以非常方便地通过 WMI 查询 USB 设备信息。 - 你可以通过
Win32_USBHub
或Win32_PnPEntity
类来访问设备的详细信息。 ManagementObjectSearcher
提供了强大的查询功能,可以按需定制查询语句,获取系统硬件和设备信息。
如果你有其他特定的需求或者遇到问题,随时可以提出。
发表回复