gpt4 book ai didi

c# - 如何在 C# 中查找 USB 设备?

转载 作者:太空狗 更新时间:2023-10-29 21:17:52 53 4
gpt4 key购买 nike

我需要遍历连接到计算机的端口,并找到特定的设备。请看下图:

enter image description here

您可以看到有 4 个设备名称具有相同的供应商和产品 ID。但是,我需要找到第一个以蓝色突出显示的端口。似乎他们唯一的区别是 friend 名(描述是 friend 名)。

在 C#.net 中实现此目的的最简单方法是什么?我在“qt”中完成了此操作,我需要知道如何使用 vs 2010 专业版在 C#、.net Framework 4 中完成此操作。我已经完成了类似 this 的问题但如您所见,它们对我的情况毫无帮助。

最佳答案

如果您使用 libusbdotnet你应该能够做这样的事情:

public static void RetrieveUSBDevices(int vid, int pid)
{
var usbFinder = new UsbDeviceFinder(vid, pid);
var usbDevices = new UsbRegDeviceList();
usbDevices = usbDevices.FindAll(usbFinder);
}

然后您应该能够迭代 usbDevices 并检查正确的 FullName .虽然还没有测试过,所以这是理论上的。

更新:试过了,效果很好——问题是什么?为什么因为自己的无能而投反对票?

这也行:

private static void Method()
{
var list = GetMyUSBDevices();
//Iterate list here and use Description to find exact device
}


private static List<UsbDevice> GetMyUSBDevices()
{
var vid = 32903;
var pid = 36;

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

var usbDevice =
(from ManagementBaseObject device in collection
select new UsbDevice(
(string) device.GetPropertyValue("DeviceID"),
(string) device.GetPropertyValue("Description"))).ToList();

var devices = new List<UsbDevice>();

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

collection.Dispose();

return (from d in devices where d.DeviceId.Contains("VID_") && d.DeviceId.Contains("PID_") && d.PID.Equals(pid) && d.VID.Equals(vid) select d).ToList();
}

public class UsbDevice
{
public UsbDevice(string deviceId, string description)
{
DeviceId = deviceId;
Description = description;
}

public string DeviceId { get; private set; }
public string Description { get; private set; }

public int VID
{
get { return int.Parse(GetIdentifierPart("VID_"), System.Globalization.NumberStyles.HexNumber); }
}

public int PID
{
get { return int.Parse(GetIdentifierPart("PID_"), System.Globalization.NumberStyles.HexNumber); }
}

private string GetIdentifierPart(string identifier)
{
var vidIndex = DeviceId.IndexOf(identifier, StringComparison.Ordinal);
var startingAtVid = DeviceId.Substring(vidIndex + 4);
return startingAtVid.Substring(0, 4);
}
}

关于c# - 如何在 C# 中查找 USB 设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18202392/

53 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com