連結集合
連結集合做為最上層集合內的巢狀子集合。 最上層集合可以有零個或多個連結集合。
HidP_GetLinkCollectionNodes 會傳回最上層集合 的連結集合數位 ,其中包含最上層集合連結集合的相關信息。
連結集合陣列描述最上層集合中包含的所有連結集合。 每個連結集合都是以 HIDP_LINK_COLLECTION_NODE 結構表示。 數位的連結節點會以識別其最上層集合內的循序和階層式順序的方式連結。 連結集合陣列的第一個專案代表最上層集合,其餘成員則代表最上層集合的連結集合。
藉由透過連結連接數位中的節點進行追蹤,使用者模式應用程式或內核模式驅動程式可以判斷最上層集合中所有連結集合的組織和使用方式。 此外,應用程式或驅動程式可以依其連結集合來組織控件。 這是因為最上層集合的 按鈕功能數位 和 值功能陣列 會識別連結集合,其中包含功能陣列所描述的每個 HID 使用 方式。
下圖顯示包含四個連結集合的最上層集合範例。
如上圖所示,鏈接集合會以由上至下和由左至右的順序連結在一起, (ABCD) 。 下表指出範例中每個連結集合的連結,最上層集合與其連結集合之間的連結。
連結節點 | Parent | Children | 第一個子系 | 下一個同層級 |
---|---|---|---|---|
A | 最上層集合 | B、C | B | None |
B | A | D | D | C |
C | A | 無 | 無 | 無 |
D | B | None | 無 | 無 |
在連結集合陣列中,下列定義會保留:
父系:連結集合的 父 系是在集合的上至下階層中緊接在集合的上方。 連結集合有一個父系。 鏈接節點的 Parent 成員會在連結集合陣列中指定其父系的索引。
子系:鏈接集合是其父系的 子 系。 父代可以有零個或多個子系。 鏈接節點的 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。 這個節點會終止別名節點的順序。 與此節點相關聯的使用量是慣用的使用方式。
應用程式或驅動程式可以重複遞增連結集合數位的陣列索引來判斷哪些集合是別名的,以尋找這類序列。
按鈕功能陣列 和 值功能陣列會 針對其描述的每個使用方式,識別包含使用方式的連結集合。 如果連結集合是別名的,功能數位會指定慣用的使用方式。