C# 如何检索usb设备的名称
我正在尝试获取连接的usb设备的名称,如手机或usb棒C# 如何检索usb设备的名称,c#,usb-drive,C#,Usb Drive,我正在尝试获取连接的usb设备的名称,如手机或usb棒 在得到这些方法之前,我浏览了stackoverflow,但是我找不到正确的属性 static List<USBDeviceInfo> GetUSBDevices() { List<USBDeviceInfo> devices = new List<USBDeviceInfo>(); ManagementObjectCollection collection; using (var
在得到这些方法之前,我浏览了stackoverflow,但是我找不到正确的属性
static List<USBDeviceInfo> GetUSBDevices()
{
List<USBDeviceInfo> devices = new List<USBDeviceInfo>();
ManagementObjectCollection collection;
using (var searcher = new ManagementObjectSearcher(@"Select * From Win32_USBHub"))
collection = searcher.Get();
foreach (var device in collection)
{
devices.Add(new USBDeviceInfo(
(string)device.GetPropertyValue("DeviceID"),
(string)device.GetPropertyValue("PNPDeviceID"),
(string)device.GetPropertyValue("Description"),
(string)device.GetPropertyValue("Name"),
(string)device.GetPropertyValue("Caption")
));
}
collection.Dispose();
return devices;
}
我非常感谢您的帮助您可以尝试使用
Win32\u pnetity
而不是查询Win32\u USBHub
。这将返回所有即插即用设备,因此我添加了一个过滤器,以删除设备id不以“USB”
开头的设备。也许有更好的方法,但我过去用过,所以我想在这里分享一下
以下是您的代码的修改版本:
class USBDeviceInfo
{
public USBDeviceInfo(string deviceId, string name, string description)
{
DeviceId = deviceId;
Name = name;
Description = description;
}
public string DeviceId { get; }
public string Name { get; }
public string Description { get; }
public override string ToString()
{
return Name;
}
}
public class Program
{
static List<USBDeviceInfo> GetUSBDevices()
{
var devices = new List<USBDeviceInfo>();
using (var mos = new ManagementObjectSearcher(@"Select * From Win32_PnPEntity"))
{
using (ManagementObjectCollection collection = mos.Get())
{
foreach (var device in collection)
{
var id = device.GetPropertyValue("DeviceId").ToString();
if (!id.StartsWith("USB", StringComparison.OrdinalIgnoreCase))
continue;
var name = device.GetPropertyValue("Name").ToString();
var description = device.GetPropertyValue("Description").ToString();
devices.Add(new USBDeviceInfo(id, name, description));
}
}
}
return devices;
}
private static void Main()
{
GetUSBDevices().ForEach(Console.WriteLine);
Console.ReadKey();
}
}
类USBDeviceInfo
{
公共USBDeviceInfo(字符串设备ID、字符串名称、字符串描述)
{
DeviceId=DeviceId;
名称=名称;
描述=描述;
}
公共字符串设备ID{get;}
公共字符串名称{get;}
公共字符串描述{get;}
公共重写字符串ToString()
{
返回名称;
}
}
公共课程
{
静态列表GetUSBDevices()
{
var devices=新列表();
使用(var mos=新的ManagementObjectSearcher(@“从Win32_pPentity中选择*))
{
使用(ManagementObjectCollection集合=mos.Get())
{
foreach(集合中的var设备)
{
var id=device.GetPropertyValue(“DeviceId”).ToString();
如果(!id.StartsWith(“USB”,StringComparison.OrdinalIgnoreCase))
继续;
var name=device.GetPropertyValue(“name”).ToString();
var description=device.GetPropertyValue(“description”).ToString();
添加(新的USBDeviceInfo(id、名称、说明));
}
}
}
返回装置;
}
私有静态void Main()
{
GetUSBDevices().ForEach(Console.WriteLine);
Console.ReadKey();
}
}
“但我找不到合适的房产。”你的意思是什么?我想以那部手机的名字“kai”为例。该name属性仅为我提供“USB根集线器”或“通用USB集线器”等。您可能希望为此使用不同于wmi的库information@DanielA.White你有什么建议哪个库适合?不同的USB设备使用不同的属性。因此,对于不同的设备,情况可能不同。某些设备甚至没有Name属性。
class USBDeviceInfo
{
public USBDeviceInfo(string deviceId, string name, string description)
{
DeviceId = deviceId;
Name = name;
Description = description;
}
public string DeviceId { get; }
public string Name { get; }
public string Description { get; }
public override string ToString()
{
return Name;
}
}
public class Program
{
static List<USBDeviceInfo> GetUSBDevices()
{
var devices = new List<USBDeviceInfo>();
using (var mos = new ManagementObjectSearcher(@"Select * From Win32_PnPEntity"))
{
using (ManagementObjectCollection collection = mos.Get())
{
foreach (var device in collection)
{
var id = device.GetPropertyValue("DeviceId").ToString();
if (!id.StartsWith("USB", StringComparison.OrdinalIgnoreCase))
continue;
var name = device.GetPropertyValue("Name").ToString();
var description = device.GetPropertyValue("Description").ToString();
devices.Add(new USBDeviceInfo(id, name, description));
}
}
}
return devices;
}
private static void Main()
{
GetUSBDevices().ForEach(Console.WriteLine);
Console.ReadKey();
}
}