Vista/Windows 7におけるキーボードカスタマイズ問題

2007年8月に『Vistaにおけるキーボードカスタマイズ問題』として、Windows Vistaにおけるキーボードカスタマイズ問題について取り上げた。XPで定番であったキーボードカスタマイズソフト窓使いの憂鬱が、Vista対応できない状況に陥ったため、それまで「窓使いの憂鬱」に依存していたユーザがVistaに移行できない状況が生まれた。前回のエントリは状況の変化に伴う追記で非常に読みづらくなっているので、改めて問題と取り得る選択肢についてまとめておく。

キーボードカスタマイズ問題

そもそもの原因はVista以降において全てのカーネルモードコードに適切なデジタル署名が求められるようになったことだ*1。特にx64エディションではすべてのカーネルモードコードにデジタル署名が付与されてなければならない。個人が作成するソフトウェアにデジタル署名を付与する方法はなく*2、結果としてカーネルモードで動作する「窓使いの憂鬱」をVista上で動作させることはできない*3

次にWindowsアーキテクチャの概観を示し、キーボード入力がアプリケーションに渡るまでのキー情報の流れを示す*4。入力されたキーがアプリケーションに渡されるまでに入れ替えるチャンスは3度ある。下位レベルから1.フィルタドライバ、2.LLフック(Low-Level Keyboard Hooks)、3.メッセージフックだ。

下位レベルの方が自由度が増すため、XPの定番ソフト「窓使いの憂鬱」はカーネルモードで動作するフィルタドライバによる実装を行っていた。しかし、Vista/Windows 7においてカーネルモードで動作させるためにはデジタル署名の取得が必要で、それは個人では不可能だ。そのため、「窓使いの憂鬱」は開発を終了し、VistaWindows 7への対応は行わないことを表明した。いままで、「窓使いの憂鬱」にてキーボードカスタマイズをしていた多くのユーザが、Vistaに移行したくても出来ない状況が生まれたのだ。

デジタル署名が要らないユーザモードで動作させるにはLLフックとメッセージフックの2手法が考えられる。LLフックの場合はCapsLockキーなどの単体キーの置き換えが出来ない(レジストリ修正で対応)、DirectInputには対応できないなどの制限がある。メッセージフックの場合は、さらに認識できるキーに制限があったり、Alt+Tabなどの一部のキーストロークがフック出来ないなど自由度が限られる。

Vista/Windows 7で利用可能な代表的なキーボードカスタマイズソフト

次にVista/Windows 7で利用可能な代表的なキーボードカスタマイズソフトの一覧を挙げる。「窓使いの憂鬱」に関しては、法人化によるデジタル署名取得の模索、LLフックによる実装への修正という2つのアプローチが進行中である。また、ユーザモードで動作する代替アプリケーションへの乗り換えが取り得る選択肢としてあげられる。自分のニーズにあったものを選択して欲しい。

のどか

窓使いの憂鬱」のVista対応版(Windows 7対応予定)。フィルタドライバとして実装されており、カーネルモードで動作する。最も強力なキーボードカスタマイズが可能。ただし、現時点では署名付きデバイスドライバではない、64bitアプリ操作時に制限があるなどの問題がある。

個人では取得できないデジタル署名を取得するために、法人化を目論んでいる。署名取得の原資とするために1,800円のシェアウェアとなっており、目標100本で会社設立、署名取得の予定となっている。署名取得目標日は2009年10月末頃が予定されている*5

筆者はVista未使用につき、「のどか」は現時点では不要なのだが、Vista/Windows 7移行時にキーボードカスタマイズ環境が整備されることを期待してレジストだけはすでに済ましている。シェアウェアということで敬遠されがちということだが、VistaWindows 7においてキーボードカスタマイズができないと非常に困る人は、是非「のどか」への支援を検討してもらいたい。

yamy (Yet Another Mado tsukai no Yuutsu)

窓使いの憂鬱」の派生版。キー入力置換をドライバベースからユーザモードフックベースに変更することにより、「窓使いの憂鬱」「のどか」ほど強力な置換はできなくなるものの、署名問題を回避する。現バージョンで64bitにも対応されているようだ。6月10日にSourceForge.JPに新規登録されたところなので、今後の開発に期待したい。

「英数(CapsLock)」「半角・全角」「ひらがな」などの単体キーの入れ替えについてはレジストリの Scancode Map による置き換えを併用(Change Keyが便利)。また、LLフックによる実現であるため、次の場合は機能しないと思われる。

  • LLフックを利用する他アプリとの共存
  • DirectInput を使ったプログラム
AutoHotkey

日本語解説はAutoHotkeyを流行らせるページを参照。LLフック型のキーボードカスタマイズソフトで、2ストロークを含む高度なカスタマイズに対応した強力なツール。ユーザモードで動作するため、署名が必要なくVista/Windows 7でも問題なく利用できる(ただし、ユーザモードフックであるため、yamyと同様の制限が存在する)。それほど自由度を必要としていないのならば、現時点では最初に考慮すべき選択肢だ。

yamyと同様、単体キーの入れ替えにはレジストリによるキーマップ変更(Change Keyが便利)を併用する必要がある。

XKeymacs

Emacs likeな操作性を実現するためのキーボードユーティリィティ。Emacsキーバインドが利用できればそれでよい人は、設定も簡単であり検討の価値がある。キー入力置換をメッセージフックで実現しているため、署名問題を回避できる。Vista/Windows 7でも動作。

*1:Windows Vista のカーネル モードのコード署名用 Microsoft クロス証明書参照

*2:一時CrystalMark作者のひよひよ氏が個人によるデジタル署名取得に成功したが、現時点では個人による取得は出来なくなっている。

*3:Vistaにおけるキーボードカスタマイズ問題で示したように、Vistaに対応させたバイナリを用いることで制限付きながら動かすことはできるが、無理矢理サポートされていない「窓使いの憂鬱」を動かすよりは本エントリで紹介する他の選択肢を検討した方が良いだろう。

*4:窓使いの憂鬱 8の344に基づき作図。

*5:2008年11月の4.06のリリース時において、署名取得が2009年4月頃に早まる可能性が示唆されていたが、それ以降公式の発表はない。ところが、早速本エントリのコメント欄に作者のid:applet_at_hさんからコメントを頂いた。Windows 7発売までには対応したいと考えているとのこと。【2009年9月3日追記】10月22日までに署名取得できるよう推進中であるとご連絡を頂いた。【2009年10月18日追記】Vista/Windows 7のキーボードカスタマイズ問題がついに解決 - A Successful Failureに記載のように、ついに署名取得が完了した。またx64への対応も併せて実施された。