キーボードフックで取得できる値

前に確認したことのまとめ.
姫踊子草では入力した本来のキーとシミュレートしている配列の両方が記録される.レジストリのキーマップを入れ替えるタイプでは入れ替えた後の値が記録される.猫まねきのようにフィルタドライバを使っているタイプでも入れ替えた後の値が記録される.

まとめるとこういう感じだろう.

レジストリ入れ替え
変更した後の値のみ
キーボードフック
両方の値
フィルタドライバ
変更した後の値のみ

キーボードフックによるすり替えで両方の値を取得してしまうのは打鍵のtomo2.0では低水準キーボードフックという同じ階層の技術を使っているからだろう.記録した時間を見てみるとおそらく入力→低水準フック→フックですり替え→低水準フックレジストリのキーマップがどのタイミングでどういう風に作用しているのかがわからないので後で調べてみよう.

ちなみにVMwarePlayerをアクティブにしているときはキー入力を記録できなかった.レジストリのキーマップを入れ替えても,猫まねきを起動中でもVMware内部にはまったく影響なし.VMwarePlayerがアクティブになっているときだけキーボードドライバをごっそり入れ替えているとか?そんなこと可能なのかしら?


まぁ,それはおいといて.問題は以前kouyさんに指摘していただいた,入力したキーとシミュレートしたキーの両方が記録されてしまうこと.今のところ打鍵のtomo用に専用のキーマップを作って対応しようかなと考えているが,上手くいくかは微妙なところ.たとえば姫踊子草の飛鳥290でかなタイプソフト向け出力で使用すると下のような対応関係になる.(無変換が左親指シフト

無変換+D => 3(あ)
無変換+Q => X , @(さ ゛)

自分が使う配列について最初にこういうものを作っておけば,出力結果だけを見た時に必要なものとそうでないものをより分けられるのではないかと思う.実際に使う場合は微妙なタイミングでずれが発生することは十分考えられる(同時押しを許容する時間の設定など)が,とりあえず試してみよう.それと,キーマップを簡単に作成する方法も検討中.

それと打鍵のtomo起動中にTODをプレイするとスペックが十分に足りていてもめっさ重くなるというコメントをもらった.これについては原因不明でまだ確認もしていないが,事実だとしたら結構やばいね..低水準フックは外部DLLを作らなくていい分楽だけど問題は多いな.