2017-06-22 116 views
1

我花了太多時間試圖理解這裏的問題。我正在使用HID條形碼掃描儀,並能夠獲取設備信息。但即使使用正確的設備ID,我也無法獲得HidDevice對象的保留。它總是返回null。以下是我有:HIdDevice.fromIdAsync總是返回null

var selector = Windows.Devices.HumanInterfaceDevice.HidDevice.getDeviceSelector(parseInt('0x1', 16), parseInt('0x6', 16)); 

     Windows.Devices.Enumeration.DeviceInformation.findAllAsync(selector, null).then(
       function (deviceInfoCollection) { 
        if (deviceInfoCollection.length > 0) { 
         for (var i = 0; i < deviceInfoCollection.length; i++) { 
          var id = deviceInfoCollection.getAt(i).id; 
          return Windows.Devices.HumanInterfaceDevice.HidDevice.fromIdAsync(id, Windows.Storage.FileAccessMode.readWrite); 
         } 
        } 
        else { 
         throw "No Devices Discovered."; 
        } 
       }) 
     .done(function (device) { 
      if (device != null) 
       successCallback(device.name); 
     }); 

我在清單文件中添加了這些設備的功能:

<DeviceCapability Name="humaninterfacedevice"> 
    <Device Id="any"> 
     <Function Type="usage:0001 *"/> 
    </Device> 
    </DeviceCapability> 
+0

您測試了[CustomHidDeviceAccess](https://github.com/Microsoft/Windows-universal-samples/tree/6370138b150ca8a34ff86de376ab6408c5587f5d/Samples/CustomHidDeviceAccess)示例嗎?如果沒有,請參考。 –

+0

謝謝。我有,並且由於其中的選擇器已配置爲與SuperMUTT設備配合使用,因此我更改了usageID和usagePageID以讓它選取鍵盤式HID設備。當我看到列出的設備時,我無法連接到它們。另外,如果這對JavaScript有任何影響,我正在使用JavaScript。 – newbee8

回答

1

我經歷了同樣的問題了。我看到你的代碼,令我奇怪的唯一事情是下面的清單標籤:

<Device Id="any"> 

通常情況下,「任何」價值的作品。但是我有問題需要供應商和產品id;我不太清楚爲什麼,但我認爲它是基於設備/ usageid類型的。我會嘗試對供應商和產品ID進行硬編碼,看看它是否有所作爲。

另一個想法:我通過使用標籤猜測您的掃描儀配置爲鍵盤。您可以檢查您的掃描儀是否可以配置爲非鍵盤HID設備,這對我個人有幫助。我看到互聯網上的其他人遇到問題,其中HidDevice返回爲空,因爲另一個程序正在使用該設備;在你的情況下,操作系統可能已經在使用鍵盤並以某種方式將其鎖定。

祝你好運!

+0

謝謝你的筆記,戴夫。我曾嘗試提供設備功能的vid/pid,但沒有運氣。該應用程序需要支持各種條形碼掃描儀和PinPad,所有這些都有望模擬鍵盤。但是,我將條碼掃描器置於POS模式下進行了試驗,Microsoft POS庫能夠將其提取出來。無論如何,我試圖讓Hid模式工作,使設備設置變得簡單。我們的用例一次可以連接多個外設。 – newbee8