pcSleep は Microsoft の Windows API に準じて、実装されています。
Microsoft の仕様として ソフトウェアレベルで起床した場合、
ユーザーの入力( マウス、キーボード)が一切無い場合、
起床から数分後に 自動的にスリープ してしまいます。
このままでは音楽ソフトウェアを実現する事もできません。そこでシステムに、
「まだ眠らないでね」とリクエストを送る API を用いる事で無人状態でも
起床状態を維持することができます。
しかし次の問題が出てきます。
API を使い続けている間は、スリープすることが出来ません。
今回苦戦したのが「いつ、このリクエストを止めるか」を違和感無く組み込む事
です。
実装自体は簡単ですが…難しい。
ユーザーが入力を起こしたならリクエストを止め、ユーザーが触れない場合は
自身のスリープタイマーが再度有効になったら止めています。
あれ…書いてみるとそんなに大した事してないや。
pcSleep では「スリープ - 起床」の完全無人 永久タスク を実現する事が
できます。永久タスクとは、
「スリープ前、プログラム起動」
「スリープ」
「起床」
「起床プログラム実行」
のフローについて人間が一切関わらず、永久に繰り返し行うことが出来るタスク
です。OS の電源設定にて「一定時間後にスリープ」を無効にしていれば、
期待通りに本ツールにて永久起動を繰り返せます。これにより、家に留守に
している間でも、30分に1回音楽を鳴らす、というのも繰り返し可能です。
( 「今からx分後にスリープ。その x分後に起床」というスケジューリングにて対応 )
Windows XP と Windows vista 以降では、復旧後の API 動作が異なるので、
これはやっかいでした。
・WindowsXP は EEEPC、デスクトップPC
・WindowsVista は BTOデスクトップ
・Windows7 は UL20FT, ET2002T
上記のプラットフォームにて API 差異を調べ、組み込んであります。
vet 1.08u からは、過去のバグ fix 含め、安定のソフトウェアとなっています。
0 コメント:
コメントを投稿