链接集合作为顶级集合中的嵌套子集合。 顶级集合可以有零个或多个链接集合。
HidP_GetLinkCollectionNodes 返回顶级 集合的链接集合数组 ,其中包含有关顶级集合的链接集合的信息。
链接集合数组
链接集合数组描述顶级集合中包含的所有链接集合。 每个链接集合由 HIDP_LINK_COLLECTION_NODE 结构表示。 数组的链接节点以标识顶层集合中的顺序和分层顺序的方式进行链接。 链接集合数组的第一个元素表示顶级集合,其余成员表示顶级集合的链接集合。
通过链接连接数组中的节点进行跟踪,用户模式应用程序或内核模式驱动程序可以确定顶级集合中所有链接集合的组织和使用。 此外,应用程序或驱动程序还可以按其链接集合来组织控件。 这是可能的,因为顶级集合的 按钮功能数组 和 值功能数组 标识链接集合,其中包含功能数组描述的每个 HID 用法 。
下图显示了包含四个链接集合的顶级集合的示例。
如上图所示,链接集合按从上到下的顺序和从左到右的顺序(ABCD)链接在一起。 下表显示,针对示例中的每个链接集合,顶级集合与其下链接集合之间的连接。
| 链接节点 | 家长 | 孩子 | 第一个孩子 | 下一个兄弟姐妹 |
|---|---|---|---|---|
| A | 顶级集合 | B、C | B | 没有 |
| B | A | D | D | C |
| C | A | 没有 | 没有 | 没有 |
| D | B | 没有 | 没有 | 没有 |
在链接集合数组中,以下定义保留:
父级:链接集合的 父 级是集合的正上方的集合,位于集合的从上到下层次结构中。 链接集合有一个父节点。 链接节点的 父 成员指定链接集合数组中其父级的索引。
子节点:链接集合是其父级的 子节点。 父节点可以有零个或多个子节点。 链接节点的 NumberOfChildren 成员指定父节点具有的子级数。
兄弟姐妹:父母的孩子是 兄弟姐妹。
下一个兄弟姐妹:兄弟姐妹按从左到右排序。 在一组兄弟姐妹中,如果有的话,下一个兄弟姐妹就是其右侧紧邻的兄弟姐妹。 链接集合节点的 NextSibling 成员指定链接集合数组中下一个同级索引的索引。 如果链接集合节点没有下一个同级节点, 则 NextSibling 设置为零。
第一个子节点:第一个子节点 是在兄弟姐妹中最左边的一个。 链接集合节点的 FirstChild 成员指定链接集合数组中第一个子项的索引。 FirstChild 设置为零,如果链接集合节点没有子节点。
应用程序或驱动程序可以通过先确定父集合的第一个子级,然后依次遍历该子级的每个同级节点,直至某个同级节点的 NextSibling 成员为零,从而确定所有父集合的子级。
以下代码演示如何使用链接集合节点索引查找链接集合七的第一个子级:
HIDP_LINK_COLLECTION_NODE Collection[10] ;
HIDP_LINK_COLLECTION_NODE Node1 ;
Node1 = Collection[Collection[7].FirstChild];
别名集合
分隔符项可用于报表描述符中,以界定一组别名集合。 每个别名集合由别名链接集合节点表示。 一个完整且唯一的别名节点集合(n,n>=2)按以下方式连接在一起:
别名节点在链接集合数组中按连续顺序排列。
第 n-1 个节点的 IsAlias 成员设置为 TRUE。 紧跟此类序列的第 n 个节点将其 IsAlias 成员设置为 FALSE。 此节点终止别名节点序列。 与此节点关联的用法是首选用法。
应用程序或驱动程序可以通过重复递增链接集合数组的数组索引来查找此类序列来确定哪些集合是别名的。
按钮功能数组 和 值功能数组 根据描述的每个用法标识包含使用情况的链接集合。 如果链接集合具有别名,则功能数组指定首选用法。