W-ZERO3[es]・Advanced/W-ZERO3[es]のテンキー入力の正体

gKanaInputのところで少し書いた、テンキー入力についての話題。
色々試した結果、VK_KANA(0x15)のキーコードを送ればかな入力モードに切り替わるというのは判明したのですが、その状態でスライドキーを閉じてテンキー入力しようとすると、無茶苦茶な文字が入力されてしまう状態に。ちなみに[1]キーを押すと、順に「3え456#え$%&」という文字が入力されます。
不思議に思って、ホーミンさんのvkeycheckerでキーコードを拾ってみたところ、こんなキーコードが送られていました。以下は無入力状態から[1]を1回押した場合のキーコードの流れです。ちなみに"D"はキー押し、"U"は離しになります。

D VK_KANA
D 0x33
U VK_KANA
D VK_KANA
U 0x33
U VK_KANA

まあ要するに、キーコード1つ1つをVK_KANAの押し離しでサンドイッチにしたコードが毎回送られていて、つまりそれは「キー入力毎にかな入力モードに切り替えて文字を入力する」ことに等しいわけで……って、なんだそりゃ?(苦笑)
もうちょっとスマートに出来なかったのかと思わないでもないですが、とにかくこれで「W-ZERO3では使えていたかな入力がW-ZERO3[es]以降使えなくなった」ことにも納得できます。そりゃ、内部で使っちゃってたら、ユーザーに使わせるわけにいかないですよね。
先ほどの無茶苦茶に見えた文字列はどうなのかといえば、要するにローマ字かな入力モードが前提で、その都度かな入力モードに切り替えていたものが、通常状態がかな入力モードに変わってしまい、結果として「ローマ字かな入力モードでかな入力」をしてしまっていた、とまあこういう事情なようで。確かに[3]キーは「あ」ですし、[E]キーは「い」ということで、内部的には正しいコードを送っているつもりなのでしょう。
gKanaInputでは、スライドキーが開いている間のみかな入力モードに切り替え、閉じるとローマ字かな入力モードに戻すという処理を行っています。まあ、実際にはこれに加えて[半角/全角]キーや[文字]キーでのモード切り替えへの対応も行っていたりしますが、その程度です。
テンキーついでにもう1つ書いておくと、テンキー側の数字キーも、フルキー側の[Fn]キーとのコンビネーションでの数字キーも、内部的にはフルキー側の数字キーとして扱われているようです。gKanaInputを常駐させた状態でスライドキーを開き、テンキーを押してみれば一目瞭然です。*1
ということでこのネタはここまで。

*1:その後の調査で間違いの可能性が出てきたので削除しました