コンテンツへスキップ

Barcode Scanner Emulator

HID キーボードウェッジの解説

キーボードウェッジは、圧倒的多数のバーコードスキャナーの既定の動作モードです。このガイドでは、それが何か、USB レベルでどう動くか、アプリケーションのテストに何を意味するかを説明します。

キーボードウェッジとは

この用語は、キーボードとそのコンピューターポートの間に文字どおり「挟み込まれ(wedged)」、キーボード信号を横取りしてスキャンした文字を注入していた、古いシリアルポートスキャナーに由来します。現代のスキャナーに物理的な挟み込みは不要です。今はこの語が、接続方式にかかわらず、スキャンしたデータをキーボードから来たかのように提示するスキャナーを指します。

USB HID とキーボードエミュレーション

USB は、キーボード、マウス、それに類する入力デバイス向けに Human Interface Device(HID)クラスを定義しています。スキャナーが USB 上で HID キーボードとして列挙されると、OS は汎用の組み込みキーボードドライバを読み込みます。スキャナー専用ドライバは不要です。スキャナーのファームウェアは、復号した各文字を物理キーボードが送る HID キーコードへ変換し、通常の USB キーボードと同じ割り込み転送でレポートを届けます。

アプリケーションから見たスキャナー入力

人間のタイピングと違う速いキー入力の連続: スキャナーはデータ全体を keydown/keyup の組の速い列として送ります。バーコードの長さにかかわらず、通常は 1 秒未満で完了します。

マウスイベントはない: HID キーボードモードのスキャナーは、ポインタ、クリック、フォーカスのイベントを生成しません。スキャン時にフィールドがフォーカスされていなければ、入力は失われるか、フォーカスを持っている別の要素へ入ります。

ペーストイベントはない: データはクリップボード操作ではなく個々のキー入力として届くため、paste のイベントハンドラはスキャナー入力を見ません。paste だけを監視する入力マスクは、それを黙って見逃します。

キーボード配列の問題

誤った文字が出る理由: スキャナーは、自身に設定されたキーボード配列を使って、復号した文字を HID キーコードへ対応づけます。その配列が OS のキーボード配列と一致しないと、文字が入れ替わることがあります。典型的な症状は、QWERTY と AZERTY のシステムで数字や句読点が別の文字として読み取られることです。

ロケールの不一致: これはスキャナー側の設定の問題であり、ソフトウェアの不具合ではありません。大半のスキャナーは、マニュアルに印刷された設定用バーコードでロケールを切り替えられます。直すにはアプリケーションのコードを変えるのではなく、OS のロケールに合わせてスキャナーを再設定します。

接頭辞と接尾辞

スキャナーは、データの前後に設定可能な接頭辞と接尾辞の列をサポートすることが一般的です。最も一般的な接尾辞は ENTER(CR、0x0D)、TAB(0x09)、ときどき完全な CR+LF の組です。接頭辞はそれほど一般的ではありませんが、古い端末アプリケーションで特定のフィールドへスキャンを振り分けるために使われることがあります。

ブラウザでのテストの制約

ブラウザは生の USB HID パケットを見ることはできず、接続された HID デバイスをスキャナーとして個別に列挙することもできません(大半のスキャナーがデータを公開しない WebHID API を除く)。また、HID キーボードモードのスキャナーと実際のキーボードを区別できません。JavaScript から使えるのは、ブラウザに見えるキーボードイベント(keydown、keyup、keypress)だけで、このサイトのツールが調べているのもまさにそれです。

関連

生のキーボードイベントを調べるには キーボードイベントテスター を使い、接尾辞の設定の詳細は ENTER と TAB の接尾辞 のガイドを読んでください。