XKeymacsを改良した

以前紹介した64bit版のWindowsに対応したXKeymacsは、キーボードフックをスレッドローカルにしていた。この理由は2つある。1つは32bitと64bitのキーボードフックの両方が1つのアプリケーションに掛からないようにすること。もう1つはIMEの制御を適切に行えるようにすることである。
キーボードフックをグローバルにしてしまうと、32bitか64bitのフックのうち、あとにフックした方にしかキーボードフォーカスが渡らないため、32bitか64bitのどちらかのアプリケーションしかIMEを制御できなかった。スレッドローカルにすると、この問題は回避できる。

キーボードフックをスレッドローカルにすると、プロセスが終了するまでフックが外れないので、XKeymacsを入れ替えるときには必ずログオフする必要がある。プロセスにアタッチしたXKeymacsのDLLは、プロセスが終了するまでデタッチされないので、外れなくても問題ないと考えていた。

しかし、キーボードフックをXKeymacsのDLLがプロセスやスレッドにアタッチした時点で掛けるのは筋が悪くて、タスクマネージャにタスクが表示されない障害が生じていた。そのため、フックを掛けるタイミングは改める必要があると考えていた。

そんな折に、最初に64bit対応のXKeymacsを作ったid:kikairoyaさんとTwitterでやり取りする機会があって、彼がキーボードフックをグローバルにして、かつIMEの制御もきちんと行えるように改良してくれた。彼の改良を取り込み、いくつかバグを直した新しいバイナリを公開したので試してみてほしい。