Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检索usb设备的名称_C#_Usb Drive - Fatal编程技术网

C# 如何检索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

我正在尝试获取连接的usb设备的名称,如手机或usb棒


在得到这些方法之前,我浏览了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();
    }
}