按鈕功能陣列包含特定類型 HID 報表的最上層集合所支援的按鈕使用方式的相關資訊。 集合功能的相關資訊包含在其 HIDP_CAPS 結構中。
使用者模式應用程式或核心模式驅動程式會使用下列其中一個 HIDClass 支援常式 來取得按鈕功能資訊:
HidP_GetButtonCaps 會傳回按鈕功能陣列,描述指定報表類型中包含的所有按鈕使用方式。
HidP_GetSpecificButtonCaps 會依呼叫端指定的使用方式頁面、使用方式識別碼和 連結集合來篩選它傳回的按鈕功能資訊。
按鈕功能陣列包含 HIDP_BUTTON_CAPS 結構,每個結構都包含 HID 使用方式 或 使用範圍的下列相關資訊:
使用情況或使用範圍的頁面
包含按鈕資料之報表 ID
使用 ID 或使用範圍
一個表示使用方式是否為別名使用方式的旗標
包含使用方式或使用範圍的連結集合
與使用或使用範圍相關聯的字串描述元和指示符 (請參閱 [標號索引項目] 和 [字串索引項目] )
HID 剖析器指派給使用方式或使用範圍的資料索引
一般而言,下列條件適用於按鈕功能陣列所描述的所有使用方式:
每一個功能結構代表與變數主要項目或陣列主要項目相關聯的單一使用方式或使用範圍。
別名使用方式可以與可變主項目一起使用。 與陣列項目相關聯的使用方式無法別名。 無法為使用範圍設別名。
HID 剖析器僅會使用所需的最小使用數,為每個按鈕指派功能用途。 剖析器會依報告描述子中指定的順序指派使用情形。 在報告描述符中,無需的用途會被捨棄。 按鈕功能陣列不包含捨棄使用方式的任何相關資訊。
如果指定給變數項目的使用方式數目小於項目中的按鈕數目,則功能陣列只會包含一個功能結構,說明一個按鈕使用方式 (變數主要項目的報告描述子中指定的最後一個使用方式)。 不過,請參閱 使用量值陣列 ,以取得報告計數大於 1 之使用量值的相關資訊。
HID 剖析器會將唯一的資料索引指派給功能陣列中描述的每個使用方式。
下列主題討論如何在按鈕功能陣列中組織和設定功能結構:
變數主要項目中的按鈕使用方式
報告描述子中指定的每一個 使用方式 或 使用範圍 ,都會由按鈕功能陣列中自己的功能結構來描述。
功能結構的 IsAlias 成員可用來指定一組 n 個別名使用方式,如下所示:
- IsAlias 會在新增至功能陣列的第一個 n-1 個功能結構中設定為 TRUE。 IsAlias 在第 n個功能結構中設定為 FALSE。 序列中最後一個別名的使用方式是慣用方式。
應用程式或驅動程式可以掃描這類序列,以判斷哪些按鈕使用方式是別名。
下表摘要說明三種別名使用方式的範例。
| 報表描述元中的別名使用順序 | 功能陣列中的使用順序 | IsAlias 成員值 |
|---|---|---|
| 用法 1 | 用法 3 | TRUE |
| 用法2 | 用法2 | TRUE |
| 用法 3 | 用法 1 | 假 |
如需如何交互參照使用量和資料索引的相關資訊,請參閱 資料索引。
陣列主要項目中的按鈕使用方式
報表描述元中指定的按鈕陣列主要專案的每個 使用方式 或 使用範圍 ,都會由按鈕功能陣列中自己的功能結構描述。 將功能結構新增至功能陣列的順序與指定主要項目使用方式的順序相反。
HID 剖析器會將 資料索引 指派給與陣列項目相關的每個用途,按照在報告描述元中指定用途的順序進行。 例如,下表顯示報表描述子中指定的一組使用方式與功能陣列中指定的使用方式和資料索引之間的對應關係。 (在此表格中, n 是剖析器指派給與陣列項目相關聯的第一個使用方式的第一個資料索引。
| 報告描述子中的使用順序 | 功能陣列中的使用順序 | DataIndex 或從 DataIndexMin 到 DataIndexMax |
|---|---|---|
| 用法 1 | 使用範圍 2 | 從 n+7 到 n+8 |
| 使用範圍 1 (含 4 次使用) | 用法2 | n+5 |
| 用法2 | 使用範圍 1 | 從 n+1 到 n+4 |
| 使用範圍 2 (含 2 次使用) | 用法 1 | n |