このページの本文へ

前へ 1 2 次へ

Windows Info 第247回

Windows 10におけるキーボードの秘密

2020年10月25日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

キーボードドライバーでの
キー入れ替え処理はレジストリで可能

 ハードウェアにより、違いがあるものの、マザーボード側に伝えられたメーク/ブレークのスキャンコードは、Windowsのデバイスドライバーが扱い、最終的に「kbdclass.sys」というキーボードドライバーに伝わる。

 ここでは、すべてのキーはWindowsスキャンコードで表現される。Windowsスキャンコードは、Scan Code Set 1のメークコードを利用したもので、どのキーが押されたのかを示す。なお、キーボードのScan Code Set 1は、最上位ビットを立ててメークとブレークを区別していたため、メークコードの範囲は0x01~0x7Fまでだったが、Windowsスキャンコードでは、メーク、ブレークは別の情報として扱うため、範囲を広げ8bitすべて(0xFFまで)を利用している。

 これにより、101キーボード以後に追加されたさまざまなキーも固有のスキャンコードを持つことができるようになっている。USBキーボードは、スキャンコードを発生させないが、HIDレポートをスキャンコードに変換し、以後の処理は同じkbdclass.sysで扱う。

 最終的には、Windowsスキャンコードは、Windowsの定義する「仮想キーコード」に変換され、キーを押した(WM_KEYDOWNイベント)、キーを離した(WM_KEYUPイベント)というイベントが発生する。それぞれが別々のイベントなので、Windowsスキャンコードは、メークコードのみが使われるわけだ。

 イベントを利用するか、文字だけを受け取るのかは、アプリケーション次第である。WindowsのAPIには、さまざまなキー入力のためのAPIがある。また、Win32APIでは、イベントを発生させる前段階に割り込むことができるキーボードフックと呼ばれるAPIがある。これを利用することでキーの差し替えなども可能なのだが、後述する仮想キーコードとのマッピングがなされた後なので、処理がちょっと複雑である。

 これに対して、kbdclass.sys側で行われるキーの入れ替え処理は比較的単純だ。レジストリ「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout」の「Scancode Map」に入れ替えたいキーのWindowsスキャンコードを記述しておけば、任意のキーを再割り当てできる。これは、キーのレイアウト処理の前なので、物理的なキーの段階で入れ替えができるからだ。キーボードフックの段階でキーの入れ替えが面倒なのは、レイアウトによって、キーの挙動が変わるからだ。

 Windowsスキャンコードを仮想キーコードに変換するときに使われるのが、キーボードレイアウトDLL「kbdxxx.dll」というファイルだ。このDLLの中にWindowsスキャンコードを仮想キーコードに変換するための変換テーブルなどが含まれている。著名なものにAXキーボード用のkbdax2.dllがある。

 AXキーボードは、101キーの英語配列をベースに日本語化したもので、アルファベットや記号類の配置が英語キーボードと同じで、そこに日本語用にキーが追加されているという特徴を持つ。一時は日本語版WindowsとAXキーボード(105キーボードなどとも呼ばれた)の組み合わせが流行っていた。というのも、AX以前は米国仕様のPC互換機のみだったため、多くのユーザーは101準拠のキーボードを使っており、その配列になれていたからだ。また、IMEオン/オフ用の「漢字」キーがスペースバーと同じ段にあり、今の「全角/半角」キーよりも押しやすかった。AXキーボードはすでに入手困難で利用者が増えることはなさそうだが、kbdax2.dllはいまだにWindows 10にも含まれており、今でも使えるはずだ。

 筆者も、昔はアルプス製のAXキーボードを複数確保し「これで一生大丈夫」と思っていたが、フルサイズが我慢できず、テンキーのないREALFORCEに乗り替えたため、一般的なキーレイアウトになった。一番に不便に感じるのは、記号類を多用するプログラムを書く場合。日本語入力は親指シフトなので、初期のREALFORCEシリーズのようにスペースキーの短いレイアウトは好ましかった。しかし、第2世代になったREALFORCEでは変換キーが右にずれてしまったため、もう筆者の指には合わなくなってしまった。ということで、次はどのキーボードを選ぶかを考えているところ。キーボードは単純なデバイスではあるが、1日中使うものなので、ちょっとした違いも許容できず、いつも悩みのタネである。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン