共用方式為


支援數位板報告描述項中的使用方式

Usage是 HID 報表中值、按鈕或集合的名稱。 主機會在從畫筆或觸控裝置擷取資料時,使用下列用法。

member 描述 頁面 識別碼 裝置
X 接觸位置的 X 座標。 桌面 0x30 手寫筆、觸控
Y 連絡人位置的 Y 座標。 桌面 0x31 手寫筆、觸控
提示 如果手指或手寫筆位於數位板表面,請設定 。 數位化 0x42 手寫筆、觸控
範圍內 在將游標停留在數位板或與數位板表面接觸時,設定偵測到手指或手寫筆。 數位化 0x32 手寫筆、觸控
信賴度 當接觸是手指 (不是手掌或任何其他不應該觸發手指輸入) 的手部時設定。 數位化 0x47 觸控
寬度 連絡人寬度。 數位化 0x48 觸控
高度 連絡人的高度。 數位化 0x49 觸控
掃描時間 相對掃描時間。 數位化 0x56 觸控
壓力 使用者套用至連絡點的壓力量。 數位化 0x30 手寫筆、觸控
如果按下手寫筆的滾筒按鈕,請設定 數位化 0x44 手寫筆
方位 關於 Z 軸之游標的逆時針旋轉。 數位化 0x3f 手寫筆、觸控
Invert 設定當手寫筆的相反端停留在數位板上時。 數位化 0x3c 手寫筆
橡皮擦 當手寫筆的相反端位於數位板表面時設定。 數位化 0x45 手寫筆
X 傾斜 Y-Z 平面與包含指標裝置軸和 Y 軸的平面之間的角度。 數位化 0x3d 手寫筆
Y 傾斜 X-Z 平面與指標裝置平面之間的角度;正 Y 傾斜對使用者。 數位化 0x3e 手寫筆
扭曲 游標的順時針旋轉,其本身的軸。 數位化 0x41 手寫筆

注意 上表中所列的使用方式已知為 Windows,並使用WM_POINTER訊息傳遞至應用程式。

注意 指標裝置可免費支援其他使用方式, (包括廠商特定的使用方式) 。 WM_POINTER訊息中,不會將其他用法傳遞至應用程式。 您可以使用 GetRawPointerDeviceData 函式來擷取這些使用方式的值。 若要讓使用方式可從 GetRawPointerDeviceData 函式存取,使用方式必須位於與 X 和 Y 使用量相同的報表中。

數位板的 HID 描述元

從Windows 8開始,觸控數位板必須顯示為觸控式螢幕 (頁面 = 0x0D,使用方式 = 0x04) 。 手寫筆數位板必須顯示為整合式畫筆 (頁 = 0x0D、使用方式 = 0x02) 或外部畫筆 (頁面 = 0x0D,使用方式 = 0x01) 。 整合式觸控和手寫筆裝置會對應到實際連接的顯示器。 外部手寫筆裝置會對應至虛擬桌面。

數位板的必要 HID 使用方式

所有數位板都需要下列用法。 不支援所有必要使用方式的裝置將無法在Windows 8上運作:

XY
XY 會報告連絡人的座標。 在Windows 8中,裝置可以報告每個連絡人的兩個點。 第一個點 (稱為 T) ,會被視為使用者想要觸控的點,而第二個點 (稱為 C) 會被視為連絡人的中心。 能夠報告 T 和 C 的裝置應該有兩個 X 值和兩個 Y 值的使用陣列。 陣列中第一個位置的值會解譯為 T 的座標,而第二個位置中的值會解譯為 C 的座標。 (這兩個使用方式的報表計數為 2,表示使用陣列) 是否存在。 報告 C 的裝置也必須報告 WidthHeight 使用量。 主機會使用 C 在接觸周圍建置周框。 如果裝置只報告一個 X 和 Y 配對,主機會針對 T 和 C 使用該配對。範例觸控描述項包含 XY的使用陣列。下列擷取自範例描述項,說明僅支援 T 的裝置與支援 T 和 C 的裝置之間的差異。

只報告 T 的裝置不能有 X 和 Y 屬性的使用陣列 (,也就是每個使用量的報表計數為 1,如下列所示。)

0x05, 0x01,                         //       USAGE_PAGE (Generic Desk..
    0x26, 0xff, 0x0f,                   //       LOGICAL_MAXIMUM (4095)         
    0x75, 0x10,                         //       REPORT_SIZE (16)             
    0x55, 0x0e,                         //       UNIT_EXPONENT (-2)           
    0x65, 0x13,                         //       UNIT(Inch,EngLinear)                  
    0x09, 0x30,                         //       USAGE (X)                    
    0x35, 0x00,                         //       PHYSICAL_MINIMUM (0)         
    0x46, 0xb5, 0x04,                   //       PHYSICAL_MAXIMUM (1205)
    0x95, 0x01,                         //       REPORT_COUNT (1)         
    0x81, 0x02,                         //       INPUT (Data,Var,Abs)         
    0x46, 0x8a, 0x03,                   //       PHYSICAL_MAXIMUM (906)
    0x09, 0x31,                         //       USAGE (Y)                    
    0x81, 0x02,                         //       INPUT (Data,Var,Abs)

支援 T 和 C 的裝置會使用使用陣列來報告 X 和 Y 值。 XY的報表計數為 2。

0x05, 0x01,                         //       USAGE_PAGE (Generic Desk..
    0x26, 0xff, 0x0f,                   //       LOGICAL_MAXIMUM (4095)         
    0x75, 0x10,                         //       REPORT_SIZE (16)             
    0x55, 0x0e,                         //       UNIT_EXPONENT (-2)           
    0x65, 0x13,                         //       UNIT(Inch,EngLinear)                  
    0x09, 0x30,                         //       USAGE (X)                    
    0x35, 0x00,                         //       PHYSICAL_MINIMUM (0)         
    0x46, 0xb5, 0x04,                   //       PHYSICAL_MAXIMUM (1205)
    0x95, 0x02,                         //       REPORT_COUNT (2)         
    0x81, 0x02,                         //       INPUT (Data,Var,Abs)         
    0x46, 0x8a, 0x03,                   //       PHYSICAL_MAXIMUM (906)
    0x09, 0x31,                         //       USAGE (Y)                    
    0x81, 0x02,                         //       INPUT (Data,Var,Abs)

注意 這些範例會利用 HID 規則,讓全域專案在每個主要專案都維持不變,直到變更為止。 這可讓 XY 使用方式只共用報表計數的一個專案。

手寫筆裝置應該使用其描述元的第一個範例,因為 C 與這些裝置無關。

必須針對 XY 使用方式指定下列全域專案:

  • 邏輯最小值
  • 邏輯最大值
  • 實體最小值
  • 實體最大值
  • 單位
  • 單位指數

裝置和單位的實體範圍必須正確報告。 如果資訊不正確,裝置將無法正常運作。 裝置也必須報告報表描述元中所指定邏輯範圍內的資料。 超出此範圍的任何報告值都會被視為不正確資料,而且值會變更為最接近的界限值, (邏輯最小值或邏輯最大值) 。

提示
使用 [小費 ] 開關可指示手指或手寫筆接觸,並從數位板表面隨即轉移。 報表大小應為 1 的主要專案。 傳遞報表時,當手指或手寫筆與數位板表面接觸時,應該設定位位置。 否則,應該清除位。

掃描時間
掃描時間 會以 100 毫秒為單位報告相對時間。 它代表裝置開始在閒置期間之後報告資料的第一個畫面的差異。 第一次收到的掃描時間會被視為後續報告時間的基底時間。 報告掃描時間之間的差異應該反映數位板的掃描頻率。 請務必注意,不同于其他使用方式,主機不允許針對掃描時間使用量的單位提供任何彈性。 值預期會變換,因為只有 1 個位元組配置給計數器。 畫面內所有連絡人的掃描時間值應該相同。 此需求也適用于使用混合模式報告資料的裝置

注意 只有觸控裝置才需要此使用方式。

範圍內
如果裝置支援 Z 軸偵測,數位板必須在數位板可能位於數位板區域內時,在輸入報告中設定範圍內使用量。 如果裝置不支援 Z 軸偵測,驅動程式不應在其報表描述項中包含 範圍 內使用方式。

舊版 Windows 有不同的指導方針,說明觸控數位板驅動程式應如何處理範圍內報告。

支援畫筆和觸控的裝置應該支援畫筆最上層集合中 XY 使用方式的 Null 狀態。 在無法正確偵測 X 和 Y 值的高度偵測到手寫筆時,裝置應該回報 X 和 Y 的 Null 值,並設定 範圍內 使用量。 Null 值只是表示這些使用方式超出指定邏輯範圍的值,前提是裝置已指出它支援相關使用量的 Null。 然後,裝置可以在手寫筆接近表面時報告精確的 X 和 Y 值,以便達成此情況。 此通訊協定可讓主機在手寫筆位於範圍內時實作手掌拒絕。

請注意,只有當報表描述項特別包含 X 和 Y 支援 Null 狀態的事即時,主機才會將邏輯範圍以外的值辨識為表示此通訊協定的實作。 否則,邏輯範圍以外的值只會移至最接近的界限值。 下列擷取自報表描述元,說明 X 和 Y 支援 Null 的裝置與不支援的裝置之間的差異。 請注意,只有在畫筆最上層集合中才需要 Null 支援。 觸控最上層集合不需要為此目的支援 X 和 Y 的 Null

X 和 Y 支援 Null 的報表擷取:

0x05, 0x01,                         //     USAGE_PAGE (Generic Desktop) 42
    0x09, 0x30,                         //     USAGE (X)                    44
    0x75, 0x10,                         //     REPORT_SIZE (16)             46
    0x95, 0x01,                         //     REPORT_COUNT (1)             48
    0xa4,                               //     PUSH                         50
    0x55, 0x0d,                         //     UNIT_EXPONENT (-3)           51
    0x65, 0x13,                         //     UNIT (Inch,EngLinear)        53
    0x35, 0x00,                         //     PHYSICAL_MINIMUM (0)         55
    0x46, 0x3a, 0x20,                   //     PHYSICAL_MAXIMUM (8250)      57
    0x26, 0xf8, 0x52,                   //     LOGICAL_MAXIMUM (21240)      60
    0x81, 0x42,                         //     INPUT (Data,Var,Abs)         63
    0x09, 0x31,                         //     USAGE (Y)                    65
    0x46, 0x2c, 0x18,                   //     PHYSICAL_MAXIMUM (6188)      67
    0x26, 0x6c, 0x3e,                   //     LOGICAL_MAXIMUM (15980)      70
    0x81, 0x42,                         //     INPUT (Data,Var,Abs)         73

沒有 X 和 Y 之 Null 支援的報表擷取:

0x05, 0x01,                         //       USAGE_PAGE (Generic Desk..
    0x26, 0xff, 0x0f,                   //       LOGICAL_MAXIMUM (4095)         
    0x75, 0x10,                         //       REPORT_SIZE (16)             
    0x55, 0x0e,                         //       UNIT_EXPONENT (-2)           
    0x65, 0x13,                         //       UNIT(Inch,EngLinear)                  
    0x09, 0x30,                         //       USAGE (X)                    
    0x35, 0x00,                         //       PHYSICAL_MINIMUM (0)         
    0x46, 0xb5, 0x04,                   //       PHYSICAL_MAXIMUM (1205)
    0x95, 0x01,                         //       REPORT_COUNT (1)         
    0x81, 0x02,                         //       INPUT (Data,Var,Abs)         
    0x46, 0x8a, 0x03,                   //       PHYSICAL_MAXIMUM (906)
    0x09, 0x31,                         //       USAGE (Y)                    
    0x81, 0x02,                         //       INPUT (Data,Var,Abs)

如需支援 XY Null 值的畫筆裝置完整描述項,請參閱 Touch and Pen Support 一節。

注意 所有手寫筆裝置都需要此使用方式,但對觸控裝置而言是選擇性的。

選擇性 HID 使用方式

下列使用方式是選擇性的,但如果數位板硬體支援它們,您應該實作它們。 不支援這些使用方式的數位板不應將它們包含在報表描述元中。

寬度高度
[寬度] 和 [高度] 使用方式代表觸控接觸點周圍周框方塊的寬度和高度。 報告的值絕對不應該是 0,除非報告了 「UP」 事件,在此情況下應該為 0。

寬度高度 也會透過WM_POINTER訊息向應用程式開發人員公開。

信心
來自 裝置的信賴度是關於觸控接觸是預定還是意外觸控的建議。 如果您確信觸控是預期的,請將信賴使用量設定為 1 (true) 。 您的裝置應該盡可能徹底拒絕意外的觸控,而延遲會保留在所需的範圍內。 如果您不確定觸控是否預期,且您的裝置未意外拒絕觸控,請將信賴使用量設定為 0 (false) 。 如果您的裝置一律拒絕意外的觸控,您就不需要包含信賴使用量。

壓力
壓力 是手指或手寫筆對數位板表面執行的力測量。 壓力允許的範圍沒有任何限制。 不過,當將資料傳遞至用戶端應用程式時,裝置所指定的範圍會正規化為 0 – 1024 的範圍。


按下手寫筆筆筒按鈕時,應該設定筆筒。 否則,它應該重設。 Windows 會使用管子來修改主要動作的提示函式, (點選、拖曳) 或次要動作 (右點選、向右拖曳) 。

雖然 壓力水筒 是選擇性的使用方式,但建議針對手寫筆數位板實作它們。 針對這些使用方式新增額外的值:壓力會定義筆刷筆觸寬度,使其更逼真,而滾筒切換可在使用手寫筆時允許滑鼠右鍵功能。

X 傾斜
X Tilt 代表 Y-Z 平面與包含換換軸和 Y 軸的平面之間的平面角度。

必須指定實體範圍和邏輯範圍。 實體範圍必須是 -90 到 90。 邏輯範圍必須夠大,才能提供精確到至少兩個小數位數的資料。 弧度也可用於實體範圍。 下列清單顯示典型的邏輯和實體組合。

  • 邏輯最小值:-9000
  • 邏輯最大值:9000
  • 單位:度
  • 單位指數:-2
  • 實體最小值:-9000
  • 實體最大值:9000

Y 傾斜
Y 傾斜 代表 X-Z 平面與包含換換器 X 平面的平面角度。

必須指定實體範圍和邏輯範圍。 實體範圍必須介於 –90 到 90 之間。 邏輯範圍必須夠大,才能提供精確到至少兩個小數位數的資料。 弧度也可用於實體範圍。 下列清單顯示典型的邏輯和實體組合。

  • 邏輯最小值:0
  • 邏輯最大值:18000
  • 單位:度
  • 單位指數:-2
  • 實體最小值:-9000
  • 實體最大值:9000

扭曲
旋轉 會指定游標繞著其主軸的順時針旋轉。

必須指定實體範圍和邏輯範圍。 實體範圍必須是 0 到 360。 邏輯範圍必須夠大,才能提供精確到至少兩個小數位數的資料。 弧度也可用於實體範圍。 在此情況下,邏輯範圍必須夠大,才能報告精確到至少四個小數位數的值。 下列清單顯示典型的邏輯和實體組合。

  • 邏輯最小值:0
  • 邏輯最大值:62831
  • 單位:弧度
  • 單位指數:-4
  • 實體最小值:0
  • 實體上限:62831

方位
Azimuth 會指定繞 Z 軸繞 Z 軸的順時針旋轉角度,透過完整的圓形範圍。 必須指定實體範圍和邏輯範圍。 實體範圍必須是 0 到 360,不過裝置可能會報告完整範圍或一半的範圍,假設觸控省略號是對稱式硬體功能。 邏輯範圍必須夠大,才能提供精確到至少兩個小數位數的資料。 弧度也可用於實體範圍。 在此情況下,邏輯範圍必須夠大,才能報告精確度至少為 4 個小數位數的值。 下列清單顯示典型的邏輯和實體組合。

  • 邏輯最小值:0
  • 邏輯最大值:36000
  • 單位:度
  • 單位指數:-2
  • 實體最小值:0
  • 實體最大值:36000

注意 當單位為 Degrees 時,單位指數必須是 -2,當 Unit 為 Radians 時則為 -4。