LibUsbDotNet调用UsbDevice.AllDevices时未找到任何设备

时间:2014-09-07 21:28:52

标签: c# visual-studio libusb libusbdotnet

我正在执行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

2 个答案:

答案 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)

The documentation

  

获取所有可用USB设备的列表(WinUsb,LibUsb,Linux LibUsb v1.x)。

  

使用此属性获取LibUsbDotNet可以访问的USB设备列表。

如果您使用鼠标和键盘的标准HID驱动程序并且没有用libusb.sys驱动程序替换它,那么LibUsbDotNet无法访问这些设备,因此无法列出它们