1

首先,我应该指出,我已将我需要与之交谈的设备添加到我的应用程序清单中,并且我能够成功地与该设备交谈。我可以使用以下行获取设备的此设备信息:

var trezorDeviceInformation = await UWPHidDevice.GetDeviceByIdSlowAsync(TrezorManager.HidId);

但是,由于某种原因,如果我尝试使用产品 ID 和供应商 ID 监视设备,则监视者的事件永远不会触发。我试过这个:

    public UWPHidDevice(uint vendorId, uint productId)
    {
        var deviceWatcher = DeviceInformation.CreateWatcher($"System.DeviceInterface.WinUsb.UsbVendorId:={vendorId} AND System.DeviceInterface.WinUsb.UsbProductId:={productId}");
        deviceWatcher.Added += DeviceWatcher_Added;
        deviceWatcher.Removed += DeviceWatcher_Removed;
        deviceWatcher.Start();
    }

    public UWPHidDevice(uint vendorId, uint productId)
    {
        string aqs = UsbDevice.GetDeviceSelector(vendorId, productId);
        var deviceWatcher = DeviceInformation.CreateWatcher(aqs);
        deviceWatcher.Added += DeviceWatcher_Added;
        deviceWatcher.Removed += DeviceWatcher_Removed;
        deviceWatcher.Start();
    }

当我插入设备或使用设备启动应用程序时,添加的事件永远不会触发。我必须强调我可以在我的应用程序中使用这个设备,并且我已经三次检查了 VendorId 和 ProductId。只是观察者不起作用。我被困住了。

有没有人有提示或示例应用程序?

编辑:我已经尝试过官方的 UWP 示例应用程序。我将 VendorId 和 ProductId 替换为我需要在代码和应用清单中使用的设备值。样本也有同样的问题。

4

1 回答 1

1

您的设备是否使用 WinUSB 驱动程序显示在设备管理器中?只有在使用 WinUSB 驱动程序时,您的代码才适用于我的供应商 ID 和 pid。

我使用这段代码:

// Create a device watcher to look for instances of the Xerox device
watcher = DeviceInformation.CreateWatcher(UsbDevice.GetDeviceSelector(vendorId, productId));

watcher.Added += new TypedEventHandler<DeviceWatcher, DeviceInformation>(this.OnDeviceAdded);
watcher.Removed += new TypedEventHandler<DeviceWatcher, DeviceInformationUpdate>(this.OnDeviceRemoved);
watcher.EnumerationCompleted += new TypedEventHandler<DeviceWatcher, Object>(this.OnDeviceEnumerationComplete);
watcher.Start();
于 2018-09-28T12:58:21.477 回答