Barcode Scanner Emulator
HID keyboard wedge 說明
Keyboard wedge 是絕大多數條碼掃描器的預設運作模式。本指南說明它是什麼、在 USB 層級如何運作,以及測試應用程式時代表什麼。
什麼是 keyboard wedge?
這個說法源自較早的序列埠掃描器:它們被實實在在地「楔入」鍵盤與電腦連接埠之間,截取鍵盤訊號,再把掃描到的字元注入其中。現代掃描器不再需要實體楔入。如今這個詞指任何把掃描資料呈現成來自鍵盤的掃描器,與連線方式無關。
USB HID 與鍵盤模擬
USB 為鍵盤、滑鼠與類似輸入裝置定義了 Human Interface Device(HID)類別。當掃描器在 USB 上列舉為 HID 鍵盤時,作業系統會載入內建的通用鍵盤驅動程式,不需要掃描器專用驅動。掃描器韌體把每個解碼字元轉換成實體鍵盤會送出的 HID 按鍵碼,報告則透過與任何 USB 鍵盤相同的中斷傳輸機制送達。
應用程式如何看見掃描器輸入
快速按鍵突發與人工打字: 掃描器把完整承載資料當成一連串快速的 keydown/keyup 配對送出,通常不到一秒就結束,與條碼長度無關。
沒有滑鼠事件: HID 鍵盤模式的掃描器從不產生指標、點選或焦點事件。若掃描時欄位沒有焦點,輸入會遺失,或進入當時真正擁有焦點的元素。
沒有貼上事件: 資料以逐鍵方式抵達,而不是剪貼簿操作,因此 paste 事件處理常式看不到掃描器輸入,只聆聽 paste 的輸入遮罩會悄悄漏掉它。
鍵盤配置問題
為什麼會出現錯誤字元: 掃描器依自身設定的鍵盤配置,把解碼字元對應到 HID 按鍵碼。若該配置與作業系統鍵盤配置不一致,字元可能被對調。典型症狀是在 QWERTY 與 AZERTY 系統上,數字或標點被掃成錯誤字元。
語系不符: 這是掃描器端的設定問題,不是軟體缺陷。多數掃描器支援透過手冊中的設定條碼切換語系。修復方式是重新設定掃描器以符合作業系統語系,而不是修改應用程式程式碼。
前置碼與後綴
掃描器通常支援在承載資料前後設定前置碼與後綴序列。最常見的後綴是 ENTER(CR,0x0D)、TAB(0x09),偶爾是完整的 CR+LF。前置碼較少見,但有時用來在舊式終端應用程式中把掃描導向特定欄位。
瀏覽器測試的限制
瀏覽器看不到原始 USB HID 封包,不能把已連線的 HID 裝置專門列舉為掃描器(WebHID API 除外,而多數掃描器並不透過它暴露資料),也無法區分 HID 鍵盤模式掃描器與真實鍵盤。JavaScript 只能存取瀏覽器可見的鍵盤事件(keydown、keyup、keypress),本站工具檢查的正是這些事件。
相關內容
使用鍵盤事件測試器檢查原始鍵盤事件,或閱讀ENTER 與 TAB 後綴了解後綴設定細節。