链接集合

作为顶级集合中的嵌套子集合的链接集合。 顶级集合可以有零个或多个链接集合。

HidP_GetLinkCollectionNodes 返回顶级集合 的链接集合数组 ,其中包含有关顶级集合的链接集合的信息。

链接集合数组描述顶级集合中包含的所有链接集合。 每个链接集合都由 HIDP_LINK_COLLECTION_NODE 结构表示。 数组的链接节点以一种在顶级集合中标识其顺序和分层顺序的方式进行链接。 链接集合数组的第一个元素表示顶级集合,其余成员表示顶级集合的链接集合。

通过跟踪链接连接数组中的节点,用户模式应用程序或内核模式驱动程序可以确定顶级集合中所有链接集合的组织和使用情况。 此外,应用程序或驱动程序可以按其链接集合来组织控件。 这是可能的,因为顶级集合的 按钮功能数组值功能数组 标识包含功能数组描述的每个 HID 用法 的链接集合。

下图显示了包含四个链接集合的顶级集合的示例。

说明包含四个链接集合的顶级集合的关系图。

如上图所示,链接集合按从上到下和从左到右的顺序 (ABCD) 链接在一起。 下表指示,对于示例中的每个链接集合,顶级集合与其链接集合之间的链接。

链接节点 Parent 子女 First Child 下一个同级
A 顶级集合 B、C B
B A D D C
C A
D B

在链接集合数组中,以下定义保留:

  • 级:链接集合的 级是集合自上而下层次结构中紧邻其上方的集合。 链接集合有一个父级。 链接节点的 Parent 成员指定其父级在链接集合数组中的索引。

  • 级:链接集合是其父项的 级。 父级可以有零个或多个子级。 链接节点的 NumberOfChildren 成员指定父节点具有的子级数。

  • 兄弟姐妹:父母的子女是 兄弟姐妹

  • 下一个同级:兄弟姐妹按从左到右的顺序排序。 兄弟姐妹的 下一个兄弟 姐妹是紧邻其右侧(如果有的话)在一组兄弟姐妹中。 链接集合节点的 NextSibling 成员指定链接集合数组中下一个同级节点的索引。 如果链接集合节点没有下一个同级节点, 则 NextSibling 设置为零。

  • 第一个子级第一个子级 是一组同级中最左边的同级。 链接集合节点的 FirstChild 成员指定其链接集合数组中第一个子级的索引。 如果链接集合节点没有子节点, 则 FirstChild 设置为零。

应用程序或驱动程序可以确定父集合的所有子级,从父级的第一个子级开始,通过第一个子级的同级排序,直到同级节点的 NextSibling 成员为零。

以下代码演示如何使用链接集合节点索引来查找链接集合 7 的第一个子级:

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。 此节点终止别名节点的序列。 与此节点关联的用法是首选用法。

应用程序或驱动程序可以通过重复递增链接集合数组的数组索引来查找此类序列来确定哪些集合具有别名。

按钮功能数组值功能数组 针对它们描述的每个用法标识包含使用情况的链接集合。 如果链接集合为别名,则功能数组将指定首选用法。