本連載では以前にPCのキーボードの仕組みを紹介したが(「Windows 10におけるキーボードの秘密」)、今回はキー入れ替えについて解説しよう。
PC ATでは、キーの位置をこのような番号で表し、これに対して発生するスキャンコードを定義していた。図は、Windows用のキーボードハードウェアの仕様を定義した「Windows Platform Design Notes Keyboard Scan Code Specification」から引用したもの。Windowsロゴキーやメニュキー(Appsキー)には、位置番号が定義されていないので直接図に表記してある
キー入れ替えのユーティリティーには
レジストリを使うタイプとHookというAPIを使うタイプがある
Windowsにおけるキーボードはデバイスドライバーが扱うため、アプリケーションから直接アクセスできない。このため、キー入れ替えを可能にする機能が装備されている。1つは、キーボードドライバーのレベルでするもので、レジストリに入れ替えたいキーを定義しておくことで動作する。もう1つは、Windowsで「Hook」と呼ばれるAPIを使うもので、キーボードから発生するイベントがアプリケーションに行く前の段階で処理する方法だ。
前者は、レジストリに設定したのち、Windowsを再起動させて、キーボードドライバーにレジストリを読み込ませる必要があることから、リアルタイムでの入れ替えるはできないし、アプリケーションごとでも不可能だ。これに対して、Hookを使う方法は、ユーザーが作成したプログラムでキーイベントを書き換えることができるため、ともに可能である。
現在、ネット上で多く見られる「キー入れ替え」「キーマッピング」アプリは、このどちらかを使っている。稀にデバイスドライバーを用いるものもあることにはあるが、現在はデバイスドライバーに電子署名が必要でその取得にお金がかかるため、フリーソフトではほとんど見かけなくなった。
PowerToysのKeyboard Managerは後者のHookを使うタイプ
PowerToysのKeyboard Managerは、Hookを使うタイプで再起動は不要。また、すでにレイアウトDLLで変換された仮想キーのレベルで入れ替える。それが何を意味するかというと、たとえばCaps Lockキーは、Windowsスキャンコードのレベルでは常に一緒だが、レイアウトDLLを通ると、JISキーボードの場合は「英数」キーになる。Caps Lockの機能は「Shift+Caps Lock」でする。「英数」キーは、VK_OEM_ATTN(0xF0、VK_240とも)コードを出力する。この仮想キーコードは、キーボードが日本語のときにだけ出力される。
ちょっとややこしいことに、このキーは押したことはイベント通知されるのに、離したことは通知されない。同じキーをShiftキーと同時に押すと、VK_CAPITALコード(0x14)が出力され、こちらは離したときにイベントが発生する。おそらく、日本語用のIMEに「英数」キーが押されたことを通知して、半角英数入力に切り替えていのだと思われる。このあたりの挙動は、Microsoftしか定義できないので、おそらくMS-IMEの都合なのではないかと思われる(他社IMEへの配慮という可能性もなくはない)。
こうしたちょっと特殊な挙動があるので、Hook形式のキー入れ替えは、キーボードのレイアウト(言語)やこれまでに押されたキーの状態を把握して、独自の処理をする必要がある。海外製のキー割り当てアプリがCaps Lockキーをうまく扱えないのは、こうした背景があるからだ。
本記事はアフィリエイトプログラムによる収益を得ている場合があります

この連載の記事
-
第525回
PC
6月以降「PCが起動不可能に?」と間違った騒がれ方をしている原因の「セキュアブート」とは? -
第524回
PC
Windows Insider Programが変化 チャンネルが3つになって整理される -
第523回
PC
AI傾倒に一息入れて、既存のWindowsの改良を宣言するMicrosoft タスクバーを画面の上下左右に移動可能に!? -
第522回
PC
Windowsでも完全キーボード操作派は注目! PowerToysのコマンドパレット -
第521回
PC
Windowsでアプリをインストールしたときに警告が表示する「Defender SmartScreen」と「Smart App Control」 -
第520回
PC
WindowsターミナルのPreview版 v1.25では「操作」設定に専用エディタが導入 -
第519回
PC
「セキュアブート」に「TPM」に「カーネルDMA保護」、Windowsのセキュリティを整理 -
第518回
PC
WindowsにおけるUAC(ユーザーアカウント制御)とは何? 設定は変えない方がいい? -
第517回
PC
Windows 11の付箋アプリはWindowsだけでなく、スマホなどとも共有できる -
第516回
PC
今年のWindows 11には26H2以外に「26H1」がある!? 新種のCPUでのAI対応の可能性 -
第515回
PC
そもそも1キロバイトって何バイトなの? - この連載の一覧へ











