飛鳥と和文入力時のIME

飛鳥で和文入力する際に無変換キーが有効だと間違って押した瞬間に未確定文字列がすべてカタカナになってしまいます。間違って変換キーを押すと、その時点で変換されてしまいます。そのため、和文入力時はIMEのプロパティから変換と無変換を無効にしています。


今朝、その状態でタイプウェル国語Kをやっているとなぜかいつもよりもミス多発。全然打ち切りできずに気分が悪くなってきたところ、なにやらおかしいことに気づきました。


変換キーを押したときにミスになっているではないか!


spy++を起動してメッセージを見てみたところ、変換キーのWM_KEYUP時に来る仮想キーコードは無効でも有効でも「VK_CONVERT」でした。そして、予想通りWM_KEYDOWNのときの仮想キーコードが違いました。


WM_KEYDOWNで変換キー無効時:VK_CONVERT
WM_KEYDOWNで変換キー有効時:VK_PROCESSKEY


無変換も同様にVK_NONCONVERTとVK_PROCESSKEYでした。

IME は、キー入力メッセージを処理し終えたら仮想キーコードを VK_PROCESSKEY に設定しますが、ImmGetVirtualKey 関数を呼び出せば元の仮想キーコードを回復させることができます。

VK_PROCESSKEYはIMEで処理されたあとに来るメッセージらしいです。とりあえずタイプウェルではVK_PROCESSKEYは無視されていますが、VK_CONVERTで認識されてミスになってしまいます。


そして、なぜかVK_NONCONVERTの方は無視されています。


うーん、どうしたら解決できるのかな?まぁ、タイピングソフト使うときと使わないときでIMEの設定を切り替えればいいだけなんですけどね。