在 C# 中,你可以使用 ManagementObjectSearcher 类通过 Windows Management Instrumentation (WMI) 查询设备信息,包括 USB 设备信息。ManagementObjectSearcher 提供了一种方式来查询系统中的各种硬件设备,并获取其详细信息。

如果你想要查询 USB 设备,可以利用 Win32_USBHub 类来获取连接到计算机上的所有 USB 设备。可以通过 ManagementObjectSearcher 执行 SQL 样式的查询语句,获取与 USB 设备相关的信息。

获取 USB 设备信息的基本步骤:

  1. 引入相关命名空间:
    需要引用 System.Management 命名空间,以便能够访问 WMI 服务。using System; using System.Management;
  2. 使用 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("-------------------------------");
        }
    }
}

代码解释:

  1. SELECT * FROM Win32_USBHub
    • 这是一个 WMI 查询语句,获取所有连接到系统的 USB 设备的信息。
    • Win32_USBHub 类包含了 USB 集线器的信息。
  2. ManagementObjectSearcher
    • ManagementObjectSearcher 执行查询并返回符合条件的对象集合(ManagementObjectCollection)。
  3. foreach (ManagementObject usbDevice in searcher.Get())
    • 遍历查询到的所有 USB 设备,并提取相关信息。
  4. usbDevice["Description"]usbDevice["DeviceID"] 等
    • 这些是 WMI 查询结果的字段,通过它们你可以访问设备的具体属性,例如 DeviceIDPNPDeviceID 等。

常用的 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 查询

  1. 查询所有 USB 设备(包括 USB 存储设备等):string query = "SELECT * FROM Win32_PnPEntity WHERE Description LIKE 'USB%'";
  2. 查询当前连接的所有 USB 存储设备string query = "SELECT * FROM Win32_DiskDrive WHERE MediaType='Removable Media'";

错误处理与权限

  • 需要确保程序具有足够的权限来访问 WMI 服务。一般情况下,查询设备信息需要管理员权限。
  • 如果程序没有适当权限,可能会抛出 AccessDeniedException,这时需要以管理员身份运行程序。

总结

  • 使用 ManagementObjectSearcher 可以非常方便地通过 WMI 查询 USB 设备信息。
  • 你可以通过 Win32_USBHub 或 Win32_PnPEntity 类来访问设备的详细信息。
  • ManagementObjectSearcher 提供了强大的查询功能,可以按需定制查询语句,获取系统硬件和设备信息。

如果你有其他特定的需求或者遇到问题,随时可以提出。