HidLibrary - .NET HID设备通信库详解
HidLibrary 是一个强大的开源 C# 库,专门用于在 .NET 应用程序中枚举和与 HID(人机接口设备)兼容的 USB 设备进行通信。该库提供了同步和异步读写功能,以及设备插入和移除的通知机制。
核心特性
- 跨平台支持:支持 x86 和 x64 架构
- 同步/异步操作:同时提供同步和异步读写方法
- 设备监控:实时监测设备的插入和移除事件
- 完整API:提供丰富的设备信息查询和操作接口
安装方式
通过 NuGet 包管理器安装:
Install-Package hidlibrary
核心类介绍
HidDevice 类
HidDevice 是与 HID 设备交互的核心类,提供了以下主要功能:
// 打开设备
device.OpenDevice();
device.OpenDevice(DeviceMode readMode, DeviceMode writeMode, ShareMode shareMode);
// 读取数据
HidDeviceData data = device.Read();
HidDeviceData data = device.Read(int timeout);
HidReport report = device.ReadReport();
// 写入数据
bool success = device.Write(byte[] data);
bool success = device.WriteReport(HidReport report);
// 异步操作
Task<HidDeviceData> ReadAsync(int timeout = 0);
Task<bool> WriteAsync(byte[] data, int timeout = 0);
HidDevices 类
用于枚举系统中所有可用的 HID 设备:
// 获取所有设备
IEnumerable<HidDevice> allDevices = HidDevices.Enumerate();
// 按VID/PID查找设备
HidDevice device = HidDevices.GetDevice(vendorId, productId);
HidReport 类
封装了 HID 报告数据,提供结构化的数据访问方式:
HidReport report = device.CreateReport();
report.ReportId = 0x01;
report.Data[0] = 0xFF;
bool success = device.WriteReport(report);
使用示例
基本设备枚举和读取
using HidLibrary;
// 枚举所有HID设备
foreach (HidDevice device in HidDevices.Enumerate())
{
Console.WriteLine($"设备: {device.Description}");
Console.WriteLine($"厂商ID: {device.Attributes.VendorHexId}");
Console.WriteLine($"产品ID: {device.Attributes.ProductHexId}");
}
// 按VID/PID查找特定设备
HidDevice targetDevice = HidDevices.GetDevice(0x1234, 0x5678);
if (targetDevice != null)
{
targetDevice.OpenDevice();
// 持续读取数据
while (true)
{
HidDeviceData data = targetDevice.Read();
if (data.Status == HidDeviceData.ReadStatus.Success)
{
Console.WriteLine($"收到数据: {BitConverter.ToString(data.Data)}");
}
}
}
异步操作示例
// 异步读取
async Task ReadDataAsync(HidDevice device)
{
while (true)
{
HidDeviceData data = await device.ReadAsync(1000);
if (data.Status == HidDeviceData.ReadStatus.Success)
{
// 处理数据
}
await Task.Delay(100);
}
}
// 异步写入
async Task WriteDataAsync(HidDevice device, byte[] data)
{
bool success = await device.WriteAsync(data, 1000);
Console.WriteLine($"写入结果: {success}");
}
设备事件监控
// 监控设备插入和移除事件
HidDevice device = HidDevices.GetDevice(0x1234, 0x5678);
if (device != null)
{
device.Inserted += () => Console.WriteLine("设备已插入");
device.Removed += () => Console.WriteLine("设备已移除");
device.MonitorDeviceEvents = true;
}
高级功能
特征报告操作
// 读取特征报告
byte[] featureData;
bool success = device.ReadFeatureData(out featureData, reportId: 0x01);
// 写入特征报告
byte[] dataToWrite = new byte[] { 0x01, 0x02, 0x03 };
bool writeSuccess = device.WriteFeatureData(dataToWrite);
设备信息查询
// 获取制造商字符串
byte[] manufacturerData;
device.ReadManufacturer(out manufacturerData);
string manufacturer = Encoding.Unicode.GetString(manufacturerData);
// 获取产品字符串
byte[] productData;
device.ReadProduct(out productData);
string product = Encoding.Unicode.GetString(productData);
// 获取序列号
byte[] serialData;
device.ReadSerialNumber(out serialData);
string serialNumber = Encoding.Unicode.GetString(serialData);
项目结构
HidLibrary 项目包含以下主要组件:
- src/HidLibrary/ - 核心库源代码
- examples/ - 各种设备的使用示例
- experimental/ - 实验性功能和设备支持
- misc/ - 相关文档和资源
支持的设备类型
该库支持多种 HID 设备,包括但不限于:
- 游戏手柄和控制器
- 条码扫描器
- 读卡器
- 工业控制设备
- 自定义 HID 设备
注意事项
- 在使用库之前,请确保设备已正确连接到计算机
- 某些设备可能需要管理员权限才能访问
- 异步操作提供了更好的性能,但需要正确处理线程同步
- 设备事件监控需要显式启用
MonitorDeviceEvents属性
HidLibrary 为 .NET 开发者提供了强大而灵活的 HID 设备访问能力,无论是开发商业应用还是个人项目,都是一个值得信赖的选择。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




