c# - 无法从 DeviceInformation.Id 创建 UsbDevice

标签 c# windows-runtime usb win-universal-app hardware

我正在尝试使用仅适用于 PC 的通用 Windows 应用程序(无手机)(WinRT) 通过 Windows.Devices.Usb API 连接到设备 (SecuGen Hamster Pro 20)。

该设备是指纹扫描仪。

我已经完成了网上找到的所有步骤:

我查找了所有使用以下设备的设备:

var myDevices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync();

这将返回大约 1400 个设备。经过一些过滤后使用:

 var resultList = myDevices.Where(s => s.Name.ToLower().Contains("secu")).ToList<DeviceInformation>();

resultList 在我的机器上包含 3 个设备(我在其他机器上试过,在一些机器上发现了 10 个结果)。

我没有使用重载来查找设备 DeviceInformation.FindAllAsync(String aqsFilter) 因为它返回 0 个结果虽然我确定我做对了(使用正确的 VID 和 PID)

这里的问题是当我尝试使用以下 3 个结果中的任何一个创建 UsbDevice 对象时:

UsbDevice device = await UsbDevice.FromIdAsync(resultList[0].Id);

返回值为null,我都试过了(resultList[0] , resultList[1] , resultList[2]) 没有运气。

我使用以下方法配置了功能:

 <DeviceCapability Name="usb">
      <Device Id="vidpid:1162 2200">
        <Function Type="name:vendorSpecific"/>
      </Device>
    </DeviceCapability> 

我还尝试从 DeviceInformation.FindAllAsync() 返回的 1400 个设备中的任何一个创建一个 UsbDevice 对象,但所有设备都返回 null,甚至有些抛出异常系统找不到指定的文件 0x80070002

我尝试读取它返回的设备的 DeviceAccessInformation DeviceAccessStatus.Unspecified

任何人都可以引导我找到我在这里缺少的东西吗?

最佳答案

您必须使用 UsbDevice.GetDeviceSelector,然后在搜索设备时使用选择器。如果没有返回任何内容,则设备未正确“配置”为使用 WinUSB.sys 驱动程序。 (据我所知,它必须使用该驱动程序才能与 usbdevice 类一起使用)。

如果您手动告诉它在设备管理器中使用该驱动程序,那么,理论上,您仍然必须先使用 regedit 更改 key 才能生效(注意:我这样做了,但仍然无法运行)。我在这里找到了解决它的解决方案: http://www.lewisbenge.net/2013/09/20/integrating-windows-8-1-with-owi-535-robotic-arm/ 基本上,您必须使用 inf 文件安装驱动程序。使用该站点上链接的那个,并根据目标平台将 NTamd64 替换为 NTarm

关于c# - 无法从 DeviceInformation.Id 创建 UsbDevice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37162862/

相关文章:

windows - 如何跟踪 WinRT 应用程序(在 Win32 中很简单)?

c++ - 在 UWP 中使用自定义视频效果

c# - 导航属性的唯一约束

xaml - 让 ListView 滚动到所选项目

c# - DataGridView 替换值

linux - 使用远程主机的 USB 端口作为本地 USB(Linux 和 Windows)

android - 在没有内置 GPS 的 Android 设备上使用 USB GPS;相当于GPSD

android - 无法在 Redmi Note 4 上打开通过 USB 安装

c# - 未找到其余 Azure 端点

方法参数中的 C# 指针?