我想与USB端口通信.如何找到我的USB设备(Weingscale)?
public static UsbDevice MyUsbDevice;
#region SET YOUR USB Vendor and Product ID!
public static UsbDeviceFinder MyUsbFinder =
new UsbDeviceFinder(0x15D9, 0x8A4C); // specify vendor, product id
#endregion
public static void Main(string[] args)
{
ErrorCode ec = ErrorCode.None;
try
{
// Find and open the usb device.
MyUsbDevice = UsbDevice.OpenUsbDevice(MyUsbFinder);
// If the device is open and ready
if (MyUsbDevice == null) throw new Exception("Device Not Found.");
// If this is a "whole" usb device (libusb-win32, linux libusb)
// it will …Run Code Online (Sandbox Code Playgroud) 可能重复:
获取USB设备列表
我正在制作一个WPF应用程序.
我正在寻找一种方法来列出我的comboBox中所有插入的USB设备(磁盘!).
我可以使用DriveInfo.GetDrives()列出所有驱动器,但是有一种简单的方法可以将其过滤到USB设备吗?
感谢名单
在C#应用程序中,有哪些好方法可以检测连接到计算机的某些设备的存在?当然是以编程方式.我需要支持Windows XP和7.
背景
我已经获得了一个使用某些连接设备的巨大C#应用程序.这些设备是定制硬件,并非设计用于没有软件.当C#应用程序启动时,它会搜索此类连接的设备并在适当时与它们通信.可以有多个连接的设备.我没有查看搜索设备的源代码.使用USB或串行电缆将设备插入PC.它们在设备管理器中显示为COM端口.有时PC和设备之间可能有USB集线器或串行到USB转换器.
当设备与某个USB集线器连接或使用某些串口转USB转换器时,软件有时无法正常检测到该设备.有时它因PC而异.我们不确定它是否会导致一些司机.
我被告知要研究设备搜索算法,如果可能的话,提出更好的解决方案并替换当前的实现.我以前没有完成这类任务,我需要了解Windows如何管理设备.
如何在C#中搜索特定的连接设备?什么是一些好的做法,我应该注意或避免什么?
我需要遍历连接到计算机的端口,并找到特定的设备.请看下面的图片:

您可以看到有4个设备名称具有相同的供应商和产品ID.但是,我需要找到第一个的端口,它以蓝色突出显示.看起来他们唯一的区别就是朋友的名字(描述是朋友的名字).
在C#.net中实现这一目标的最简单方法是什么?我在'qt'中完成了这个,我需要知道如何使用vs 2010 professional在C#,.net framework 4中完成此操作.我已经经历了这样的问题了这样,但你可以看到,他们是我的情况没有帮助.
我已经在我的代码中实现了SO 问题的解决方案,但我正在从连接的 USB 设备中寻找更多信息。
我对了解设备的制造商特别感兴趣。
我不确定如何从SO question 中GetPropertyValue看到的方法用法中确定哪些其他属性可用。我在最后尝试了一些关键字,但它们都报告错误,所以我认为这些不是可用的属性。
知道我如何获取更多信息,而不仅仅是DeviceID, PnpDeviceID, 和Description?
编辑:对于任何想知道这里是属性的完整列表以及我为它们获得的值的人。据我所知,没有任何设备提供比这里看到的更多或更少的内容(可能是转换为字符串?)。
Availability:
Caption: USB Root Hub
ClassCode:
ConfigManagerErrorCode: 0
ConfigManagerUserConfig: False
CreationClassName: Win32_USBHub
CurrentAlternateSettings:
CurrentConfigValue:
Description: USB Root Hub
DeviceID: USB\ROOT_HUB20\########
ErrorCleared:
ErrorDescription:
GangSwitched:
InstallDate:
LastErrorCode:
Name: USB Root Hub
NumberOfConfigs:
NumberOfPorts:
PNPDeviceID: USB\ROOT_HUB20\4&\########&0
PowerManagementCapabilities:
PowerManagementSupported:
ProtocolCode:
Status: OK
StatusInfo:
SubclassCode:
SystemCreationClassName: Win32_ComputerSystem
SystemName: ASystemName
USBVersion:
Run Code Online (Sandbox Code Playgroud)
并从链接的 SO 答案中编辑代码,但具有所有属性。
public class USBDeviceInfo
{
public String Availability { …Run Code Online (Sandbox Code Playgroud) 我只是想知道一台台式电脑可以访问多少USB摄像头?有限制吗?我打算创建自己的Windows应用程序(使用.NET)来捕获大约10台连接到台式PC的USB摄像头.这可能吗?
我正在开发C#应用程序,需要找到任何USB端口是否可以免费使用.
是否有任何C#类或WMI查询来确定USB端口是否可以免费使用?
假设,如果一台机器有5个USB端口,其中2个已被鼠标占用,键盘和其余3个是免费的.所以我需要识别这些未使用的端口.
有没有任何win32类,所以我可以使用P/Invoke
问候,
阿莫尔.
我试图在Windows 7上获取所有USB设备(包括便携式设备),现在我搜遍了所有并没有找到一个好的答案.
我试过这段代码:
static void Main(string[] args)
{
//
// Get an instance of the device manager
//
PortableDeviceApiLib.PortableDeviceManagerClass devMgr
= new PortableDeviceApiLib.PortableDeviceManagerClass();
//
// Probe for number of devices
//
uint cDevices = 1;
devMgr.GetDevices(null, ref cDevices);
//
// Re-allocate if needed
//
if (cDevices > 0)
{
string[] deviceIDs = new string[cDevices];
devMgr.GetDevices(deviceIDs, ref cDevices);
for (int ndxDevices = 0; ndxDevices < cDevices; ndxDevices++)
{
Console.WriteLine("Device[{0}]: {1}",
ndxDevices + 1, deviceIDs[ndxDevices]);
}
}
else
{
Console.WriteLine("No WPD devices …Run Code Online (Sandbox Code Playgroud) 查询适用于Win32_USBHub 中的某些设备
SELECT * FROM Win32_USBHub WHERE DeviceID = '{0}'
Run Code Online (Sandbox Code Playgroud)
这是代码上下文,
// Check if USB device is plugged in
string deviceQuery = String.Format("SELECT * FROM Win32_USBHub WHERE DeviceID = '{0}'", deviceID);
using (var searcher = new System.Management.ManagementObjectSearcher(deviceQuery))
if (searcher.Get().Count == 0)
MessageBox.Show(@"Device not detected");
Run Code Online (Sandbox Code Playgroud)
但是,当设备未在“通用串行总线控制器”中列出时,查询来自Win32_USBHub不会返回我正在寻找的连接设备。

是否有另一个“表”可供查询,Win32_USBHub其中包含我正在寻找“Cardio Perfect PRO-Link USB”的设备?或者这会是一个“自定义表”?
我正在为com端口做快速测试.我在我的电脑上运行以下代码,但它只将COM1添加到组合框中?我的电脑有6个USB端口,为什么它只找到1?
string[] ports = SerialPort.GetPortNames();
foreach (string port in ports)
{
comboBox1.Items.Add(port);
}
Run Code Online (Sandbox Code Playgroud)