我正在开发一个C# .NET 2.0应用程序,其中我需要扫描附加的HID。这是如何做到的呢?因为它是HID,所以Windows不给它分配COM端口。我只需要以编程方式确定设备是否已附加。谢谢。
附加信息
当我将USB设备连接到我的计算机时,设备管理器中的人机界面设备下会出现两个条目。单击它们的属性将在各自的详细信息选项卡中生成这些信息:
符合HID的设备设备实例Id: HID\VID_1795&PID_6004\7&2694D932&0&0000
USB人机界面设备设备实例Id: USB\VID_1795&PID_6004\B973000000EB0D00
发布于 2010-09-17 20:36:04
在WMI代码创建器中,选择以下选项:
命名空间: root\WMI
班级: MSWmi_PnPInstanceNames
从结果框中为下列代码选择InstanceNames:
using System;
using System.Management;
using System.Windows.Forms;
namespace WMISample
{
public class MyWMIQuery
{
public static void Main()
{
try
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\WMI",
"SELECT * FROM MSWmi_PnPInstanceNames");
foreach (ManagementObject queryObj in searcher.Get())
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("MSWmi_PnPInstanceNames instance");
Console.WriteLine("-----------------------------------");
Console.WriteLine("InstanceName: {0}", queryObj["InstanceName"]);
}
}
catch (ManagementException e)
{
MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
}
}
}
}发布于 2018-11-03 23:44:32
下面是在Windows上枚举Hid设备的示例:
public static ConnectedDeviceDefinition GetDeviceDefinition(string deviceId, SafeFileHandle safeFileHandle)
{
try
{
var hidAttributes = GetHidAttributes(safeFileHandle);
var hidCollectionCapabilities = GetHidCapabilities(safeFileHandle);
var manufacturer = GetManufacturer(safeFileHandle);
var serialNumber = GetSerialNumber(safeFileHandle);
var product = GetProduct(safeFileHandle);
return new ConnectedDeviceDefinition(deviceId)
{
WriteBufferSize = hidCollectionCapabilities.OutputReportByteLength,
ReadBufferSize = hidCollectionCapabilities.InputReportByteLength,
Manufacturer = manufacturer,
ProductName = product,
ProductId = (ushort)hidAttributes.ProductId,
SerialNumber = serialNumber,
Usage = hidCollectionCapabilities.Usage,
UsagePage = hidCollectionCapabilities.UsagePage,
VendorId = (ushort)hidAttributes.VendorId,
VersionNumber = (ushort)hidAttributes.VersionNumber,
DeviceType = DeviceType.Hid
};
}
catch (Exception)
{
return null;
}
}这里的API调用:https://github.com/MelbourneDeveloper/Device.Net/blob/master/src/Hid.Net/Windows/HidAPICalls.cs
Windows 10 (UWP)也有类似的情况:
public async Task<IEnumerable<ConnectedDeviceDefinition>> GetConnectedDeviceDefinitions(FilterDeviceDefinition deviceDefinition)
{
var aqsFilter = GetAqsFilter(deviceDefinition.VendorId, deviceDefinition.ProductId);
var deviceInformationCollection = await wde.DeviceInformation.FindAllAsync(aqsFilter).AsTask();
var deviceDefinitions = deviceInformationCollection.Select(d => GetDeviceInformation(d, DeviceType));
var deviceDefinitionList = new List<ConnectedDeviceDefinition>();
foreach (var deviceDef in deviceDefinitions)
{
var connectionInformation = await TestConnection(deviceDef.DeviceId);
if (connectionInformation.CanConnect)
{
await Task.Delay(1000);
deviceDef.UsagePage = connectionInformation.UsagePage;
deviceDefinitionList.Add(deviceDef);
}
}
return deviceDefinitionList;
} public Task<IEnumerable<ConnectedDeviceDefinition>> GetConnectedDeviceDefinitions(FilterDeviceDefinition deviceDefinition)
{
return Task.Run<IEnumerable<ConnectedDeviceDefinition>>(() =>
{
//TODO: Get more details about the device.
return UsbManager.DeviceList.Select(kvp => kvp.Value).Where(d => deviceDefinition.VendorId == d.VendorId && deviceDefinition.ProductId == d.ProductId).Select(GetAndroidDeviceDefinition).ToList();
});
}使用Hid.Net,您可以在任何平台上以相同的方式枚举设备,如下所示。见整篇文章。
var devices = await DeviceManager.Current.GetConnectedDeviceDefinitions(new FilterDeviceDefinition { VendorId = 0x1209, ProductId = 0x53C1 });
foreach (var device in devices)
{
Debug.WriteLine(device.DeviceId);
}https://stackoverflow.com/questions/3729970
复制相似问题