我正在尝试使用仅适用于 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/