DFJ2を真似したキー設定で使い続けること14年、流れ流れてATOK。
DFJ2/WINがどうだったかは記憶の彼方ですが、VJE-Deltaでは確定前にタブキーを押すと、確定と同時にタブが入力されました。2.0/2.5/4.0共通の仕様だったはずです。
どうなるかというと、Webブラウザのフォームで日本語入力している時に便利なのです。例えば姓を変換してタブを押すと、姓を確定しつつ名の欄に移動する具合になります。
しかしATOK2008では、どう設定してもこれは実現できないようでした。
この場合、とりあえずタブに全文確定を割り当て、確定を検出してVK_TABを発行すれば良いわけです。
Spy++を眺めたところ、確定すると下記のようなメッセージが来ていました。
WM_IME_NOTIFY / IMN_PRIVATE / lParam:0x04
WM_IME_NOTIFY / IMN_PRIVATE / lParam:0x13
WM_IME_ENDCOMPOSITION
IMN_PRIVATEは必ず0x04~0x13の順ですが、変換してから確定するとWM_IME_ENDCOMPOSITIONが二つのIMN_PRIVATEより後(上記のままの順序)、変換前に確定するとWM_IME_ENDCOMPOSITIONが先になります。
Vista/7上のATOK2008とFirefoxの組み合わせではWM_IME_ENDCOMPOSITIONが来ず、また二度目以降の確定の場合は0x13のIMN_PRIVATEも来ませんでした。ということで、0x04のIMN_PRIVATEを処理すれば良いことになります。
XP上でVJE-Delta4.0とFirefoxの組み合わせだとWM_IME_ENDCOMPOSITIONは普通に来るのですが。
DeltaEndにこの仕組みを入れたテスト版で動作を確認できましたが、現在のメイン環境は64ビットです。64ビットEXEとDLLも用意しないと、64ビットアプリにフックが届きませんし、その場合はそれぞれDLLを別名にしなければならないということでした。
# Webブラウザぐらいでしか使わない機能だと割り切る選択肢もあり
32ビットをメインとし、64ビット動作用の子プロセスを呼ぶとして、設定の同期が課題です。まずは32ビットEXE~32ビットDLL間を共有メモリにしてみましょうか。
DFJ2/WINがどうだったかは記憶の彼方ですが、VJE-Deltaでは確定前にタブキーを押すと、確定と同時にタブが入力されました。2.0/2.5/4.0共通の仕様だったはずです。
どうなるかというと、Webブラウザのフォームで日本語入力している時に便利なのです。例えば姓を変換してタブを押すと、姓を確定しつつ名の欄に移動する具合になります。
しかしATOK2008では、どう設定してもこれは実現できないようでした。
この場合、とりあえずタブに全文確定を割り当て、確定を検出してVK_TABを発行すれば良いわけです。
Spy++を眺めたところ、確定すると下記のようなメッセージが来ていました。
WM_IME_NOTIFY / IMN_PRIVATE / lParam:0x04
WM_IME_NOTIFY / IMN_PRIVATE / lParam:0x13
WM_IME_ENDCOMPOSITION
IMN_PRIVATEは必ず0x04~0x13の順ですが、変換してから確定するとWM_IME_ENDCOMPOSITIONが二つのIMN_PRIVATEより後(上記のままの順序)、変換前に確定するとWM_IME_ENDCOMPOSITIONが先になります。
Vista/7上のATOK2008とFirefoxの組み合わせではWM_IME_ENDCOMPOSITIONが来ず、また二度目以降の確定の場合は0x13のIMN_PRIVATEも来ませんでした。ということで、0x04のIMN_PRIVATEを処理すれば良いことになります。
XP上でVJE-Delta4.0とFirefoxの組み合わせだとWM_IME_ENDCOMPOSITIONは普通に来るのですが。
DeltaEndにこの仕組みを入れたテスト版で動作を確認できましたが、現在のメイン環境は64ビットです。64ビットEXEとDLLも用意しないと、64ビットアプリにフックが届きませんし、その場合はそれぞれDLLを別名にしなければならないということでした。
# Webブラウザぐらいでしか使わない機能だと割り切る選択肢もあり
32ビットをメインとし、64ビット動作用の子プロセスを呼ぶとして、設定の同期が課題です。まずは32ビットEXE~32ビットDLL間を共有メモリにしてみましょうか。