大まかに言うと、スキャンコード(またはスキャンコード)とは、キーボードプロトコルによってキーボードのキーを一意に識別するために使用される数値[ a ]またはビット配列[ b ]のことです[ c ] 。キーボードは通常[ d ]、コンピュータの内部キーボード状態(どのキーが押されているかを追跡する状態)を更新するために、スキャンコードをコンピュータに送信します。スキャンコードがどのように、いつ、どのような形で送信されるかの正確なメカニズムは、プロトコルによって異なります。
キーボード プロトコルは、キーの状態 (押下/解放) をエンコードしたビット マップを送信するなど、コンピュータの内部キーボード状態を更新するために他の手段を使用する場合があります。ブート プロトコルが選択されている場合、 HID プロトコルを使用するキーボードでは、部分的にこのようになります。修飾キーの状態をビット マップ (各ビットがキーの状態を表す) にエンコードして送信し、押下されたキー (修飾キーを除く) のスキャン コード配列も送信します。[ 1 ]
キーの位置を行と列でマッピングするには、よりシンプルなコンピュータ ハードウェアが必要です。そのため、以前は、ソフトウェアやファームウェアを使用してスキャン コードをテキスト 文字に変換する方が、テキスト 文字ごとにキーボードを配線するよりも安価でした。[ 2 ] このコスト差は以前ほど大きくはありませんが、多くの種類のコンピュータは、後方互換性を維持するために、依然として従来のスキャン コードを使用しています。
IBM PC互換コンピュータのキーボードは、キーが押されたときと離されたときにスキャンコードを送信します。キーが押されたときに送信される「make」スキャンコードと、キーが離されたときに送信される「break」スキャンコードが異なります。IBM PC互換規格では、キーが押されている間、キーボード自体がmakeスキャンコードを繰り返し生成することで、「タイプマチック」な繰り返しキーを生成することもできます。[ 3 ]ほとんどの文字キーは1バイトのmakeスキャンコードを持ち、特殊機能を実行するキーは2バイトまたは3バイトのスキャンコードを持ち、通常はバイト(16進数) E0、、E1またはで始まりますE2。さらに、いくつかのキーは、さまざまなタイプのソフトウェアが処理しやすくするために、一連のキーをエミュレートするより長いスキャンコードを送信します。
PS/2 キーボード以降の PC キーボードは、最大 3 つのスキャンコード セットをサポートしています。PS/2 互換キーボードは、セット 1、2、または 3 でスキャン コードを送信するように指示できますが、どのスキャンコード セットがキーボードでサポートされているかはキーボードによって異なります。[ 4 ]最もよく見られるのは、 IBM PC XTおよびそれ以前の 83 キー キーボードに基づく「XT」(「セット 1」)スキャン コードです。これらは主に 1 バイトで構成され、下位 7 ビットはキーを識別し、最上位ビットはキーを押すとクリア (スキャン コードの作成)、キーを離すとセット (スキャン コードの変更) になります。一部の追加キーには、E0(まれに、E1またはE2) プレフィックスが付いています。これらは、E0プレフィックス (キーを離す範囲にあるため、理解しないオペレーティングシステムには影響しない) を無視しても妥当な結果が得られるように、当初割り当てられました。たとえば、テンキーのEnter キーはのスキャン コードを生成しますがE0 1C、これは Return キーのスキャン コード に対応します1C。
IBM 3270 PCは独自のスキャンコードセット(「セット3」)を導入し、キー番号の付け方が異なり、キーの解放はF0接頭辞で示されました。下位互換性を確保するため、3270 PCはアドオンカードとBIOS拡張機能を使用して、これらのスキャンコードをXT(セット1)スキャンコードに変換しました。
IBM PC ATでは、「AT」(「セット 2」)スキャンコードが導入されました。84 キーの AT キーボードでは、これらは主にセット 3 のサブセットでしたが、レイアウトの変更によりいくつかの違いが生じました(たとえば、ファンクション キーの位置とスキャンコードが変更されました)。PC AT 以降に追加されたキーは、セット 2 とセット 3 でスキャンコードが異なることが多く、セット 2 では、多くの場合、E0またはのE1接頭辞が付きます。ここでも、キーの解放は接頭辞で示されますF0。
IBM PC AT 以降のコンピュータでは、マザーボード上のキーボードコントローラが、いわゆる変換モードで AT (セット 2) スキャンコードを XT (セット 1) スキャンコードに変換します。[ 5 ]この変換はパススルーモード で無効にすることができ、生のスキャンコードを表示できます。[ 6 ] したがって、ソフトウェア開発者が最新の PC 互換機でセット 2 スキャンコードまたはセット 1 スキャンコードに遭遇するかどうかは、キーボードへのアクセス方法によって異なります。Linuxがキーボードコントローラによるセット 2 からセット 1 への変換を検出するとセット 1 を使用し、そうでない場合はほぼ確実にセット 2 を使用します。[ 7 ]
USBキーボードは、主にUSB規格で規定されている新しいスキャンコードセットを使用します。USBキーボードを認識するすべてのコンピュータは、これらの新しいスキャンコードを認識します。[ 11 ]
一部のオペレーティングシステムでは、コンピュータの起動中にキーを押し続けることで、キーの押下スキャンコードを確認できます。運が良ければ、結果として表示される「キーが押されたまま」エラーメッセージにスキャンコード(またはその一部)が表示されます。[注: Windows 7では、スキャンコードの1バイトのみが表示されます。]
仮想キーボードはスキャンコードではなく、Unicode文字を入力します。