按鈕功能陣列

按鈕功能數位包含特定類型 HID 報表之最上層集合所支援的按鈕使用方式相關信息。 集合功能的相關信息包含在其 HIDP_CAPS 結構中。

使用者模式應用程式或內核模式驅動程式會使用下列其中一個 HIDClass 支援例程 來取得按鈕功能資訊:

按鈕功能陣列包含 HIDP_BUTTON_CAPS 結構,每個結構都包含下列 HID 使用 方式或 使用範圍的相關信息:

  • 使用量或使用量範圍的使用量頁面

  • 包含按鈕數據之報表的報表標識碼

  • 使用量標識碼或使用量範圍

  • 旗標,指出使用方式是否為 別名使用方式

  • 包含使用方式或使用範圍的連結集合

  • 與使用方式或使用範圍相關聯的字串描述元和指定項 (請參閱指示項索引專案和字串索引專案)

  • HID 剖析器指派給使用量或使用範圍的數據索引

一般而言,下列條件會保留按鈕功能陣列所描述的所有使用方式:

  • 每個功能結構都代表與變數主要專案或數位主要專案相關聯的單一使用方式或使用範圍。

  • 別名用法可以搭配變數主要專案使用。 與陣列項目相關聯的使用方式無法加上別名。 無法將使用範圍設為別名。

  • HID 剖析器只會使用最少的必要使用量數目,將使用量指派給每個按鈕。 剖析器會依報表描述元中指定的順序來指派使用方式。 系統會捨棄報表描述元中不需要的使用方式。 按鈕功能陣列不包含任何有關捨棄使用方式的資訊。

  • 如果為變數專案指定的使用次數小於專案中的按鈕數目,則功能陣列只會包含一個功能結構,描述一個按鈕使用方式, (變數主專案報表描述項中指定的最後一個使用方式) 。 不過,如需報表計數大於 1 的使用值相關信息,請參閱 使用量值數組

  • HID 剖析器會將唯一的數據索引指派給功能陣列中所述的每個使用方式。

下列主題討論如何在按鈕功能陣列中組織及設定功能結構:

變數主要專案中的按鈕使用方式

報表描述項中指定的每個 使用 方式或 使用範圍 ,都是由按鈕功能陣列中自己的功能結構所描述。

功能結構的 IsAlias 成員可用來指定一組 n 別名用法,如下所示:

  • IsAlias 會在新增至功能數位的第一個 n-1 功能結構中設定為TRUEIsAliasn個功能結構中設定為 FALSE。 慣用的使用方式是序列中最後一個別名用法。

應用程式或驅動程式可以藉由掃描這類序列來判斷哪些按鈕使用方式是別名。

下表摘要說明三個別名用法的範例。

報表描述元中的別名使用順序 功能陣列中的使用順序 IsAlias 成員值
使用量 1 使用量 3 TRUE
使用方式 2 使用方式 2 TRUE
使用量 3 使用量 1 FALSE

如需使用方式和數據索引如何交叉參考的資訊,請參閱 數據索引

陣列主要專案中的按鈕使用方式

報表描述元中所指定按鈕數位主要專案的每個 使用 方式或 使用範圍 ,都會由按鈕功能陣列中自己的功能結構來描述。 將功能結構新增至功能陣列的順序,是針對主要專案指定使用方式的順序相反。

HID 剖析器會根據報表描述元中指定使用量的順序,將數據 索引 指派給與數位專案相關聯的每個使用方式。 例如,下表顯示一組使用方式之間的對應,如報表描述元中所指定,以及功能陣列中指定的用法和數據索引。 (在此數據表中, n 是剖析器指派給與數位 item 相關聯之第一個使用方式的第一個數據索引。)

報表描述元中的使用順序 功能陣列中的使用順序 DataIndex 或從 DataIndexMin 到 DataIndexMax
使用量 1 使用範圍 2 n+7 到 n+8
使用量範圍 1 (,4 個使用量) 使用方式 2 n+5
使用方式 2 使用範圍 1 n+1 到 n+4
使用量範圍 2 (,2 個使用量) 使用量 1 n