hakeの日記

Windows環境でプログラミングの勉強をしています。

atd下でのQCopコマンドの実行

さらに昨日の続き
SHOUTcastPlayerのスリープ機能でatdに登録したスクリプトでQCopコマンドを使用するようにしたのですが、スクリーンセーバが働いていると動かないとのご指摘を受けました。実験してみるとたしかにスクリーンセーバが働いているとQCopが実行されない(あるいはペンディングになっている?)です。設定画面でセットできるスクリーンセーバの最大値は30分なので、これを超える時間のスリープ機能は使用できないことになります。
そこでatdにスクリプトを登録する際にスクリーンセーバを切る以下のQCopコマンドを発行してみたところ、何故か機能しません。

停止
qcop QPE/System 'setScreenSaverMode(int)' 0
再開
qcop QPE/System 'setScreenSaverMode(int)' 3

そこでもう一つのコマンド

停止
qcop QPE/System 'setScreenSaverIntervals(int,int,int)' 0 0 0
再開
qcop QPE/System 'setScreenSaverIntervals(int,int,int)' -1 -1 -1

を試したところ、こちらは機能しました。
でもスリープさせるときにスクリーンセーバを切るのを良いとして、スリープで電源オフした後使用するときにもスクリーンセーバがオフのままなんですよね。
この問題をどう処理したら良い物なのか、よく判りません。。。
一応省電力設定画面を開いてOKで閉じれば機能は再開するみたいなのですけどね、なんとか自動で行う良い方法はないものか。


……


よくよく考えたら、atdに登録して実際にネット切断や電源オフするスクリプトにスクリーンセーバの復帰コマンドを書いておけば良いんだ。
うん、これならなんとかなりそう。