高見知英のかいはつにっし(β)

高見知英のアプリケーション開発日誌 のほか、地域活動などの活動報告ブログ。

Todayアプレット

うちのZEROのTodayに、アプレット数行分の隙間があります。じゃあ、隙間埋めに何か作ってみようかと、カウントダウンタイマーのアプレットを作ってみていたんです。まあ、内容としてはたいしたこと無いし、いくら不慣れなC言語とはいえ手間取ることはないだろう・・・
――と思っていたら、相当手間取りましたf(^ー^;
まあー、C言語と言うより、Mobile拡張のAPIの情報がとにかく少なくて。
何時間かかけたあげくデバイスではどうしても速度が追いつかないということで却下。なんか、疲れました。もうしばらくC言語はさわりたくありません(>_<)
とかいって面白い情報を見つけるには見つけたので、またさわると思いますが。

とりあえず、完成はしなかったにしろ、見つけた情報は以下の通り

WM_TODAYCUSTOM_...メッセージの多くは、レジストリの値がSelectability=2でないと発生しない

Todayアプレットでは、レジストリに指定した値によって受け取るメッセージが異なり(MicrosoftのToday画面選択用APIについて参照)

  • Selectability=0では表示するだけで選択ができないアプレット
  • 1では選択はできるが、選択方法の制御(下を押したときに選択解除されないでアプレット内で処理するとかができない)ができないアプレット
  • 2では選択でき、選択方法の制御も行えるアプレット

の三種類があります。
で、1にすると、文字通り選択でき、アクションボタンの押下もできるのですが、WM_TODAYCUSTOM_ACTIONなどは発生しないのです。
じゃあ何が発生するかというと、どうもWM_LBUTTONDOWNらしい。
Selectability=1のアプレットを作る場合はWM_LBUTTONDOWNをハンドリングしないと意味がないでしょうね。ソースが公開されていて、Selectability=1なアプレットはあまり見かけないので、他にどんなことができるのかはよくわかりませんが。

バイブレータを動かすAPU Vibration

バイブレータを動かすAPIとして、VibrationというAPIがあるらしいです。時間指定や繰り返し指定ができるようです。
どうもバイブレーションや、LED、音による通知はちょっと前のバージョンのWindowsCEからサポートされていたようです。ただし、音による通知以外はオプションで、メーカーの実装依存だとか。サポートしていない機種で呼出すと、失敗するだけということなんでしょうか。呼出してないのでわかりませんが。
――というのも、どうもコレ、vibrate.hというヘッダファイルにて宣言されてるようですが、なぜかSDKには入っていないらしい。まあ、C#でならAPIの呼出し方法はわかるし、使えないこともないかもしれませんね。

以上二つ。残念ながら二つだけでした。
まあ、Microsoftのモバイル開発向けのページを眺めているうちに、デバイスシャットダウンなどのイベント取得や、ROMメモリ、RAMメモリのサイズ取得などのAPIの使い方がわかったので、収穫はほどほどあったと言えましょう か(;´_`;)

ダイアルキー入力はどこに流れる?

ところで、あきらめたついでにちょっと試してみたことのですが、Todayアプレットからダイアルキーの入力は関知できるのか?
とりあえずWM_KEYUP、WM_KEYDOWN、WM_TODAYCUSTOM_USERNAVIGATIONの三つのメッセージについて、何かあったらキーコードを表示するように細工をしてみましたが、何も出てきませんね。Todayでダイアルキーを押せば電話画面が立ち上がるにしても、もう少し何かしようがあるような気がしたんですが。

いくらW-ZEROを電話に使う人であっても、待ち受けから直接電話番号を入力して電話をするなんてケースは滅多になく、普通電話帳や着信履歴、ZEROの場合はそれに加えてランチャーから電話番号を選択するくらいしかないと思うんですよね、短縮ダイアルにでも対応していればともかく、ZEROにはそれもないし。

Today上でのダイアルキー入力を無効にするソフトの存在は知っていますが、ただ単に無効にするのもなんだか無駄だしなあ。Todayでダイアルキーの入力を奪い、結果電話機能の起動を阻止するみたいな流れにできないかなと思ったんですが(まあ、そこらの携帯みたく、ダイアルキー押下→直接メニューにアクセスとか、ダイアルキー長押し→何かアクション とかになってくれるのが理想ですけどね)。
Todayスクリーン自体(Todayアプレットの親ウィンドウ)をウィンドウフックしてメッセージを横取りしてやれば、何か面白いものが出たかもしれませんが、もう疲れました。C言語はしばらく勘弁です(>_<)

そういえば、マネージ拡張って・・・

そういえばVisualStudioC++はマネージ拡張なんていう技が使えますが、あれをTodayでやることはできないんでしょうかね。
DLLMainが作れないことがC#のDLLのをTodayアプレットにできない原因というのなら、DLLMainが作れるC言語で、.NET Frameworkを使った場合はどうなるんだろう?と、ちょっと考えてしまいました。ああ、ついでにMFCなどもそうですね。MicrosoftのWindows Media Player曲データ取得サンプルなんかは、しっかりオブジェクト志向なC++でTodayを実装していたようですし、もしかしたらこんな芸当もできるのかな?


そしてもう一つ、やっぱりPDA開発用のちゃんとした本がないとダメですね。