首先,我应该指出,我已将需要与之交谈的设备添加到我的应用清单中,并且我能够成功与设备通话。我可以使用以下行获取设备的此设备信息:
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替换为我需要在代码和应用程序清单中使用的设备值。该示例具有相同的问题。
答案 0 :(得分: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();