首頁 >後端開發 >C++ >如何在 Windows 中以程式設計方式列舉已連接的 USB 裝置?

如何在 Windows 中以程式設計方式列舉已連接的 USB 裝置?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-25 00:42:09283瀏覽

How Can I Programmatically Enumerate Connected USB Devices in Windows?

在 Windows 中枚舉連接的 USB 設備

獲取連接到 Windows 計算機的 USB 設備的完整列表對於系統監控、硬件管理和調試至關重要。為此,利用 Windows 管理規範 (WMI) 提供了一個強大的解決方案。

利用 System.Management 命名空間

首先,在項目中包含對 System.Management 的引用。此命名空間使您的代碼能夠與 WMI 交互,WMI 是查詢系統信息的關鍵組件。

查詢 USB 集線器設備

識別 USB 設備的關鍵在於查詢 Win32_USBHub 實例。這些對象代表 USB 總線層次結構上的物理或虛擬集線器,提供有關已連接設備的詳細信息。

查詢設備屬性

獲得 USBHub 對象列表後,您可以繼續查詢其屬性值,例如 DeviceID、PNPDeviceID(唯一的硬件標識符)和 Description(用戶可讀的設備名稱)。

填充 USBDeviceInfo 類

為了組織檢索到的數據,請考慮創建一個名為 USBDeviceInfo 的自定義類。此類應包含 DeviceID、PnpDeviceID 和 Description 的屬性,使您能夠封裝重要的設備屬性。

提取設備信息

實例化 USBDeviceInfo 類,並通過從集合中的每個 USBHub 對象提取相應數據來填充其屬性。這使您可以構建所有檢測到的 USB 設備的結構化列表。

代碼示例

以下代碼片段提供了一個說明性示例,說明如何在 C# 中檢索和處理 USB 設備信息:

<code class="language-csharp">using System;
using System.Collections.Generic;
using System.Management;

namespace USBDeviceEnumerator
{
    class Program
    {
        static void Main(string[] args)
        {
            var usbDevices = GetUSBDevices();

            foreach (var usbDevice in usbDevices)
            {
                Console.WriteLine(
                    $"设备 ID:{usbDevice.DeviceID},PNP 设备 ID:{usbDevice.PnpDeviceID},描述:{usbDevice.Description}");
            }

            Console.ReadKey();
        }

        static List<USBDeviceInfo> GetUSBDevices()
        {
            List<USBDeviceInfo> devices = new List<USBDeviceInfo>();

            using var searcher = new ManagementObjectSearcher(
                @"Select * From Win32_USBHub");
            using ManagementObjectCollection collection = searcher.Get();

            foreach (var device in collection)
            {
                devices.Add(new USBDeviceInfo(
                    (string)device.GetPropertyValue("DeviceID"),
                    (string)device.GetPropertyValue("PNPDeviceID"),
                    (string)device.GetPropertyValue("Description")
                    ));
            }
            return devices;
        }
    }

    class USBDeviceInfo
    {
        public USBDeviceInfo(string deviceID, string pnpDeviceID, string description)
        {
            DeviceID = deviceID;
            PnpDeviceID = pnpDeviceID;
            Description = description;
        }
        public string DeviceID { get; private set; }
        public string PnpDeviceID { get; private set; }
        public string Description { get; private set; }
    }
}</code>

通過利用 WMI 並遵循這些步驟,您可以有效地提取和枚舉連接到 Windows 計算機的 USB 設備,為您提供一種可靠的方法來監控和管理 USB 硬件。

以上是如何在 Windows 中以程式設計方式列舉已連接的 USB 裝置?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn