Winform程序获取USB设备信息

前言

本篇文章探索的是,对winform程序中客户端USB连接设备信息的获取。

准备

windows10、vs2022、winform程序。

定义【UsbDeviceInfo】类

此类用于设备信息的属性字段定义。

public class UsbDeviceInfo
{
    public string DeviceID { get; set; }    // 设备 ID(如 VID&PID)
    public string Manufacturer { get; set; } // 厂商
    public string Description { get; set; } // 设备描述
    public string Caption { get; set; }     // 设备标题
    public bool IsUsbDevice { get; set; }  // 是否为 USB 设备
}

定义GetUsbDevices方法

using System.Management;

private List<UsbDeviceInfo> GetUsbDevices()
{
    List<UsbDeviceInfo> devices = new List<UsbDeviceInfo>();

    try
    {
        // 查询所有 USB 设备(包括控制器和设备)
        using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(
            "SELECT * FROM Win32_PnPEntity"))
        {
            var list = searcher.Get();
            foreach (ManagementObject mo in list)
            {
                try
                {
                    string deviceId = mo["DeviceID"]?.ToString() ?? "";
                    bool isUsbDevice = deviceId.StartsWith("USB\\") ||
                                      (mo["Caption"]?.ToString()?.IndexOf("USB", StringComparison.OrdinalIgnoreCase) >= 0);

                    devices.Add(new UsbDeviceInfo
                    {
                        DeviceID = deviceId,
                        Manufacturer = mo["Manufacturer"]?.ToString(),
                        Description = mo["Description"]?.ToString(),
                        Caption = mo["Caption"]?.ToString(),
                        IsUsbDevice = isUsbDevice
                    });
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Error processing device: {ex.Message}");
                }
            }
        }
    }
    catch (Exception e)
    {

        throw;
    }


    // 过滤出 USB 设备
    return devices.Where(d => d.IsUsbDevice).ToList();
}

使用GetUsbDevices方法

var usbList = GetUsbDevices();

探索

现代浏览器(Chrome、Edge)提供了 WebUSB API,借助它能够直接与 USB 设备进行通信。但对于IE这样的旧浏览器并没有很便捷的方案,只能编写ActiveX控件来访问USB。

需要注意的是,使用 ActiveX 控件可能存在安全风险,因为它允许网页执行本地代码,容易受到恶意软件的攻击。同时,IE 浏览器逐渐被 Microsoft Edge 等现代浏览器取代,对新特性的支持有限,在实际应用中应尽量考虑使用现代浏览器来实现 USB 设备信息的获取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值