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 设备信息的获取。
848

被折叠的 条评论
为什么被折叠?



