我正在执行LibUsbDotNet的示例代码,它将返回所有连接的USB设备的信息。您可以在下面找到此代码。
using System;
using LibUsbDotNet;
using LibUsbDotNet.Info;
using LibUsbDotNet.Main;
using System.Collections.ObjectModel;
namespace Examples
{
internal class ShowInfo
{
public static UsbDevice MyUsbDevice;
public static void Main(string[] args)
{
// Dump all devices and descriptor information to console output.
UsbRegDeviceList allDevices = UsbDevice.AllDevices;
foreach (UsbRegistry usbRegistry in allDevices)
{
if (usbRegistry.Open(out MyUsbDevice))
{
Console.WriteLine(MyUsbDevice.Info.ToString());
for (int iConfig = 0; iConfig < MyUsbDevice.Configs.Count; iConfig++)
{
UsbConfigInfo configInfo = MyUsbDevice.Configs[iConfig];
Console.WriteLine(configInfo.ToString());
ReadOnlyCollection<UsbInterfaceInfo> interfaceList = configInfo.InterfaceInfoList;
for (int iInterface = 0; iInterface < interfaceList.Count; iInterface++)
{
UsbInterfaceInfo interfaceInfo = interfaceList[iInterface];
Console.WriteLine(interfaceInfo.ToString());
ReadOnlyCollection<UsbEndpointInfo> endpointList = interfaceInfo.EndpointInfoList;
for (int iEndpoint = 0; iEndpoint < endpointList.Count; iEndpoint++)
{
Console.WriteLine(endpointList[iEndpoint].ToString());
}
}
}
}
}
// Free usb resources.
// This is necessary for libusb-1.0 and Linux compatibility.
UsbDevice.Exit();
// Wait for user input..
Console.ReadKey();
}
}
}
我的问题是代码中执行的第二行:
UsbRegDeviceList allDevices = UsbDevice.AllDevices;
根本不会返回任何设备,而我确实有我想要连接的设备,我的键盘和鼠标。
以前有人遇到过这个问题吗?和/或有谁知道如何解决它?
提前致谢! Milan van Dijck
答案 0 :(得分:4)
Does libusb support HID devices?
在Windows上,libusb支持本机Windows HID驱动程序,但存在一些限制,例如无法访问HID鼠标和键盘,因为它们是系统保留的,以及直接读取HID报告描述符。除此之外,您应该像使用任何其他USB设备一样与HID设备进行通信。
如果您的应用程序将围绕HID访问,我们鼓励您尝试使用Signal 11 Software的HIDAPI库,它也是跨平台的。它在Windows和Mac OS X下使用本机HID API,并且可以在Linux下使用libusb或hidraw作为后端。
答案 1 :(得分:2)
获取所有可用USB设备的列表(WinUsb,LibUsb,Linux LibUsb v1.x)。
和
使用此属性获取LibUsbDotNet可以访问的USB设备列表。
如果您使用鼠标和键盘的标准HID驱动程序并且没有用libusb.sys驱动程序替换它,那么LibUsbDotNet无法访问这些设备,因此无法列出它们