blechmusikの日記

キー・カスタマイズ・ソフトウェア "DvorakJ" の覚え書きをはじめとして様々なことを書いています。

Spaceキー + 修飾キー + 文字キーや、 Space + 変換キー + 文字キー の組み合わせを処理できるようにした

以前は、Space + Ctrl + 文字Space + 変換 + 文字 の出力処理を DvorakJ では制御できないと考えていた*1。そう考えたのは、AutoHotkey のホットキーの処理上制約が存在するためだ。DvorakJ が採用している方法では、Space+ 文字Ctrl + 文字変換 + 文字という組み合わせは処理できるものの、修飾キー以外のキーを三つ以上押し下げたときには、AutoHotkey の側でホットキーの処理を何ら開始できないのである。
ここで、AutoHotkeyGetKeyState() - AutoHotkeyJpという関数の存在を思い出した。この関数を使用すれば、任意のキーが押されているか否かをその都度確認できる。そう、ホットキーの処理を開始した時点では、二つのキーが押されたことしか判定しなくとも、その後でそれ以上のキーの状態を判定できるのだ。
GetKeyState() を用いる動作について試行錯誤した結果、表題のとおりのキーの組み合わせを処理できた。注意してほしいのは、ホットキーの設定上、真っ先にSpace を押すことと、最後に文字キーを押すことだ。また、この機能を使用するには、当然であるが、SandS の機能を有効にする必要がある。
本日公開した DvorakJ の版に、上記の機能を早速組み込んだ。

*1:http://d.hatena.ne.jp/blechmusik2/20101013#c における kasuga_toru さんとのやりとりを参照のこと。