Windows.Devices.HumanInterfaceDevice 命名空间    
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
此命名空间允许 UWP 应用访问支持 人机接口设备 (HID) 协议的设备。
设备支持
此命名空间支持大多数 HID。 但是,它不提供对顶级应用程序集合的访问权限, (TLC) 由以下用法表示。
无法访问的使用情况。
| UsagePage | UsageIds | 
|---|---|
| HID_USAGE_PAGE_UNDEFINED(0x00) | All | 
| HID_USAGE_PAGE_GENERIC(0x01) | HID_USAGE_GENERIC_MOUSE(0x02)HID_USAGE_GENERIC_KEYBOARD(0x06)HID_USAGE_GENERIC_KEYPAD(0x07)HID_USAGE_GENERIC_SYSTEM_CTL(0x80) | 
| HID_USAGE_PAGE_KEYBOARD(0x07) | 全部 | 
| HID_USAGE_PAGE_CONSUMER(0x0C) | All | 
| HID_USAGE_PAGE_DIGITIZER(0x0D) | All | 
| HID_USAGE_PAGE_SENSOR(0x20) | 全部 | 
| HID_USAGE_PAGE_LIGHTING_ILLUMINATION(0x59) | HID_USAGE_LAMPARRAY(0x01) | 
- 键盘和鼠标设备是系统保留的设备
- LampArray HID 可以使用 HidDevice.GetDeviceSelector 枚举,但必须使用 LampArray.FromIdAsync 实例化
- 可以使用 HidDevice.GetDeviceSelector 枚举传感器 HID ,但必须使用其各自的 Windows.Devices.Sensors 设备 (实例化,例如 LightSensor.FromIdAsync)
人机接口设备功能
访问 HID 的 UWP 应用必须在其清单的功能节点中包含特定的设备功能数据。 此数据标识设备及其用途 (或功能) 。 请注意,某些设备可能具有多个功能。
自 Windows 10 版本 1809 (2018 年 10 月更新)
- 
              
              <DeviceCapability>: Name 属性必须为 humanInterfaceDevice。
<DeviceCapability Name="humanInterfaceDevice"/>
如果面向 HID 电话设备 (UsagePage==0x0B) ,则还必须指定附加功能 hidTelephony 。
<DeviceCapability Name="humanInterfaceDevice"/>
<DeviceCapability Name="hidTelephony"/>
在 2018 年 10 月 Windows 10 版本 1809 (之前更新)
自 1809 年以来,不再需要指定 VendorId/ProductId 和 函数类型 ,并且会在较新的系统上被忽略。 如果面向 1809 之前的系统,请参阅下文。
- <DeviceCapability>: Name 属性必须为 - humanInterfaceDevice。- <设备>: Id 属性必须指定设备标识符。 此元素可以指定 供应商 ID (vid) 和 产品 ID (pid) ;或者,它可以指定泛型字符串 - any。 此外,- Device Id可能包含 或- bluetooth的- usb可选提供程序字符串。- 
              
              <函数>: Type 属性指定设备函数。 此元素包含一个或多个 HID 用法值。 这些值由 和可选 UsageId组成UsagePage,每个值都是 16 位十六进制值。
 
- 
              
              <函数>: Type 属性指定设备函数。 此元素包含一个或多个 HID 用法值。 这些值由 和可选 
 
在以下供应商定义的使用情况数据中,设备由 供应商 ID 和 产品 ID 组合标识。
<DeviceCapability Name="humaninterfacedevice">
    <Device Id="vidpid:0A81 0701">
      <Function Type="usage:ffa0 0001"/>
    </Device>
</DeviceCapability>
以下内容与第一个 相同,但 元素中Device Id附加的提供程序字符串usb除外。
<DeviceCapability Name="humaninterfacedevice">
    <Device Id="vidpid:0A81 0701 usb">
      <Function Type="usage:ffa0 0001"/>
    </Device>
</DeviceCapability>
在以下游戏设备数据中,没有 供应商 ID 和 产品 ID。
<!-- Any gamepad device  -->
<DeviceCapability Name="humaninterfacedevice">
    <Device Id="any">
      <Function Type="usage:0005 *"/>
    </Device>
</DeviceCapability>
在以下游戏杆和游戏板数据中,没有 供应商 ID 和 产品 ID
<!-- Any generic gaming device  -->
<DeviceCapability Name="humaninterfacedevice">
    <Device Id="any">
      <Function Type="usage:0004 *"/>
      <Function Type="usage:0005 *"/>
    </Device>
</DeviceCapability>
疑难解答
- 验证应用程序清单中 (humanInterfaceDevice) 的 HID 功能。 如果是电话设备,请确保hidTelephony还包含该功能。
- 验证用户是否已授予应用程序使用 HID 的权限。
- 验证设备类型是否不是指定为不可访问的设备类型。
- 不可访问的 HID 仍可能由 DeviceInformation.FindAllAsync () 枚举,但不能由 HumanInterfaceDevice.FromIdAsync () 打开。  尝试打开此类设备会引发异常或返回 null。
 
- 不可访问的 HID 仍可能由 DeviceInformation.FindAllAsync () 枚举,但不能由 HumanInterfaceDevice.FromIdAsync () 打开。  尝试打开此类设备会引发异常或返回 
-  () 的计算机内部设备 DEVPKEY_Device_InLocalMachineContainer == TRUE通常 无法访问 ,除非在具有 嵌入式模式 和lowLevelDevices功能的 SKU 上运行。
- 通常 无法访问 包含上部/下层筛选器驱动程序的堆栈的设备。  第三方有时会添加这些内容,以便为 自定义硬件启用其他功能。
- 设备限制部分由hidclass.sys在设备枚举期间确定,这可能会根据是否存在设备/类筛选器将 HID 设备接口上的设备接口GUID_DEVINTERFACE_HID属性DEVPKEY_DeviceInterface_Restricted设置为TRUE。
- 可以通过查找 UpperFilters和LowerFilters属性,使用 DeviceManager 确定设备 UpperFilter/LowerFilter 驱动程序是否存在。
- 可以通过查找 Class upper filters和Class lower filters属性,使用 DeviceManager 确定 HID 类 UpperFilter/LowerFilter 驱动程序是否存在。
- 可以通过调用 CM_Get_Device_Interface_Property来检查设备接口属性,其中pszDeviceInterface是将传递给 FromIdAsync 的相同字符串。
 
- 设备限制部分由
- 通过与驱动程序开发人员合作创建硬件支持应用来创建自定义设备时,可以绕过这些限制
类
| HidBooleanControl | 表示 HID 设备上返回开/关值的简单布尔控件。 例如键盘上的 LED 灯。 | 
| HidBooleanControlDescription | 描述给定 HID 设备的布尔控件。 | 
| HidCollection | 检索一组相关控件的集合信息。 HID 协议使用集合对彼此相似或与物理或操作邻近性相关的一组控件进行分组。 | 
| HidDevice | 表示顶级集合和相应的设备。 | 
| HidFeatureReport | 表示 HID 功能报告。 功能报告由设备和主机发出。 设备问题功能报告,用于向主机描述其功能和默认设置。 主机问题功能报告,用于发出设备的请求。 | 
| HidInputReport | 表示 HID 输入报告。 设备发出输入报告来描述状态更改、用户输入和其他特定于设备的数据。 例如,HID 键盘设备将使用输入报告来发出按键信号。 HID 状态传感器将使用输入报告来发出状态检测事件的信号。 | 
| HidInputReportReceivedEventArgs | 表示 HID API 作为输入报告事件的一部分发送的参数。 | 
| HidNumericControl | 表示 HID 设备上的数值控件,该控件返回一系列值。 例如,扬声器上的音量控制。 | 
| HidNumericControlDescription | 描述给定 HID 设备的数字控件。 | 
| HidOutputReport | 表示 HID 输出报告。 主机问题输出报告,用于请求设备上的更改。 例如,主机可能会向键盘发出打开或关闭 LED 的请求。 | 
枚举
| HidCollectionType | 标识定义设备上控件分组的关系。 集合是一种对一组彼此相似的控件进行分组的方法;或 与物理或操作邻近性相关。 | 
| HidReportType | 指定 HID 报表类型。 |