esやAd[es]ではToday画面で左右のキーを押すと,発信履歴,着信履歴が表示されるそうです.
これが,技術的にどのようにして実現されているのか,微妙に気になります.
Today画面で左右のキーを押したら,現在選択されているTodayPluginに左右のキーが押されたことが通知され,そのPlugin内でイベントが処理されるのが普通です.
どのTodayPluginが選択されていたとしても,問答無用でキーイベントを横取りし,自前の処理を行う(この場合 履歴の表示)ためには,かなり特殊なことを行う必要があると思われます.
予想としては2つあります.
■ 予想 1.キーボードドライバ側で特殊な処理を入っている
キーボードドライバ(d2keybd.dll, shkeybd.dll)側に以下のような処理が入っている.
・左右のキーが押されたとき,Today画面表示中ならば,電話アプリへ履歴の表示を要求.
・左右のキーが押されたとき,Today画面表示中でなければ,通常のキーコードを発行.
■ 予想 2. Today画面(DesktopExplorerWindow)のサブクラス化
リモートスパイ++で見ると分かると思いますが,各々のTodayPluginの一行ごとにウィンドウが存在します.
そのウィンドウの親の親の...と遡って,トップレベルウィンドウがDesktopExplorerWindowです.
DesktopExplorerWindowをサブクラス化し,左右のキーが押された・離されたメッセージを独自に処理してしまえば,各子ウィンドウであるTodayPluginへ処理が移らず,希望した内容が実現できます.
多分,予想2.が正解なような気がしますが...
2007年10月08日
この記事へのコメント
この記事へのトラックバック



