電話やContactでのインクリメンタルサーチ の続き2

なりさんやchaiさんが KeyboardMappings 以下のレジストリを自動設定するプログラムを公開されていますが、私の環境ではうまく動作しませんでした。みなさんインクリメンタルサーチできるようになっているのでしょうか?^^;


と言うのも、先日記事を書いた際に、同じようなプログラムはとっくに自作していて、StartUpに入れてみたりしたのですが、うまく動かないので公開していませんでした。


今の私の環境での動作は以下のようになっています。
例えば、"江藤(えとう)"さんが Contact に登録されているとします。

  1. Todayの状態から"E"を押す → 江藤さんが候補に出る
  2. そこからさらに"T"を押す → 江藤さんが候補から消える (PAQ910やContact上では、江藤さんも候補になります)
  3. Backキーを2回押す("ET"を消す)
  4. "E"を押す → 江藤さんが候補に出ない
  1. Todayの状態から受話キーを押して、Phone画面を出す
  2. "E"を押す → 江藤さんが候補に出ない

という動作になります。
つまり、数字のふってあるキーに対しては、Todayから入力した1文字目しか検索対象になりません。
また、上記動作には KeyboardMappings 以下のレジストリはまったく関係してないようで、削除してしまっても同じ動作になりました。


他の方のところでは正常に動作しているとしたら、何か入れているアプリか、他の設定が動作に影響しているのでしょうか?
う〜ん、わからない^^;


[追記]
というか、この KeyboardMappings 以下のレジストリって、起動時に StartUp 実行前に読み込まれていて、StartUp やその後で値を書き換えてもまったく動作が変わらないような気がします。
そもそも StartUp で書き換えた値が有効になっているということは、前に書いた「Treo Pro では KeyboardMappings を起動時に誰かが書き戻している」は StartUp よりも前に実行されているということで、その時点で読み込みが完了してしまっているのではないでしょうか?
Contactは終了できますが、Phone は起動時に常駐していて、終了することの無いアプリなので、上記の動きになるのだと思います。


試しに AlternateLanguageProcessing の値を変えてみましたが、Contactではリセット無しに値によって動作が変わりますが、Phone ではリセットするまで動作は変わりませんでした。


[追記2]
発行されているキーコードを調べてみました。


Today や Contact が起動している状態で、'E' を押した時のキーコードは 0x45。これは 'E' のキーコードです。
次に Phone が起動している状態では、0x31 でした。これは '1' のキーコードです。


これらの違いは、おそらくドライバレベルで行われていることなので、上記レジストリは関係ないでしょう。また、Today 状態からなら1文字だけ日本語の検索ができているのも、これが原因でしょう。


試しに、Phone 起動中に '1' のキーコードが来たら 'E' に置き換えるプログラムを書いて試してみましたが、正しく日本語のインクリメンタルサーチができるようになりました。