blechmusikの日記

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

DvorakJ で文字キー以外の同時打鍵をするときに生じていた不具合を修正した

不具合の原因は、「コンビネーションキー」という機能*1を使用するホットキーの指定方法にあった。具体例を出すと、"sc079 & sc01E"というものだ。前者は [変換]を指し、後者は [A] を指し示す。前者のキーを修飾キーとして使用するのだ。この「コンビネーションキー」の設定をわかりやすく書けば、[変換] + [A] となる。
「コンビネーションキー」を使用すると、修飾キーとして指定したキーの動作が変更されてしまう。この例では、"sc079"、すなわち[変換]の動作が変更される。どう変更されるかというと、このキーが押されたと判断される時点が押し上げ時になる。こういうわけで、文字キー以外の同時打鍵の判定が厳しくなっていたのだ。
解決法は「コンビネーションキー」を使用せずに、同時打鍵の判定をすることだ。そう、文字キー同士の同時打鍵と同様の判定方法を採用すればよい。「コンビネーションキー」を使用しなくとも、規定の時間内に二つのキーが押し下げされたかを判定できるのだ。ただし、このままではきちんとした同時打鍵をうまく判定できない。ここでいうきちんとした同時打鍵とは、修飾キーを押し下げながら文字キーを押し下げる同時打鍵のことだ。これに対処するためには、文字キーを押したときの判定時に、修飾キーが押し下げされているかを調べればよい。AutoHotkey - GetKeyStateを使用すれば、当該修飾キーが押し下げされているかを調べることができる。
本日付の DvorakJ ではこの問題に対処した。


追記:この修正があらたな不具合を生み出すに至った。DvorakJ の修飾キーの同時打鍵にはまだ問題があるようだ - blechmusik2の日記参照。