2010年8月4日水曜日

重荷

 WM機は設定次第で、一定時間後に自動的にスクリーンのバックライトが切れます。また、一定時間後に自動的にサスペンドするという設定も可能です。
 スクリーンのバックライトが切れているだけならば見た目上は真っ黒ですが、一応アプリなどは起動したまま動作したままになっています。しかしサスペンドされてしまうと、電源ボタンを一度押さないと復帰しません。(余談ですが、この状態でも電話の着信やプッシュ対応メールの受信は自動で行われます。某所でそのことを勘違いしている人がいたもので……)

 で、MTGLifeCounterなのですが、MTGというゲームの関係上、どうしてもライフ操作の感覚が長く空くことがあります。そこそこに頻繁に弄るとしても、設定によっては、毎度毎度サスペンドされてしまっては不便だろうということで、次バージョンで「アプリ起動中は自動サスペンドを行わない」という設定をいれる予定です。

 ここからは技術的な話なのですが、それを可能にするのがAPI関数「SystemIdleTimerReset」ということがグーグル先生のおかげでわかり、早速実装しました。この関数の役割は簡単にいうと、サスペンドするまでの時間をカウントしている値をリセットするのです。名前のまんまですね。しかしどうにもこうにも、この関数がうまく動作していないのか呼び出せていないのかわかりませんが、自動サスペンドがOFFになってくれねぇのです。
 その原因については(自分のPGミスという線も含めて)調査中ですが、あまり芳しくないです。なのでとりあえず、Ver0.80では次の方法で代理処理とすることにしました。

・API関数「keybd_event」を使用する
 要は、キーイベントが発生された(=つまりユーザがWM機で何らかの操作を行った)ということを擬似的に発生させ、システムをだますわけです。これを一定時間ごとに呼び出してやれば、その都度サスペンドのタイマがリセットされるので、望んだとおりの動作にはなります。しかし、これでサスペンド対策を行うと、以下の点が問題になります。
 1.スクリーンのバックライトがつきっぱなし
 一定時間後に少し暗くなるっていうことすらなく、常に全開状態です。そうなるとバッテリー消費が激しくなることが想定されます。これは明日から仕事中に起動しっぱにして、どれぐらい減りが早いかを大雑把にですが見てみます。

 2.擬似的に使うキーにユーザが何か操作を割り当てていた場合、誤作動を起こしかねない
 自分の場合はマウスのスクロールボタンを割り当てています。WM機でこのイベントが発生することは想定しにくいですが、一部では、WM機にマウスをつなげて操作してみたという猛者もいるそうなので、そのときが不安です。また、sortinchikeyって名前だったかな?そういうアプリでキーイベントに好きな動作を割り当てられるとのことなので、これを使っていた場合にどうなるの?って気はします。使ったことないのでよくわかってないで勝手に心配してるだけですが……。

 2のほうは心配しすぎ感はありますが、1のほうは割りと大きな問題だとは思いますので、なんとか対処したいものですが、さて……。
 
(で、気が付いたらまたこんな時間ですよ畜生。明日仕事中に寝ないように気をつけないと……)

0 件のコメント:

コメントを投稿