SelSaver公開

 久々に新作ソフトを公開した。これまたいつものごとく自分で欲しいなと思ったのがきっかけ。(^^;) スクリーンセーバーチェンジャーなのだが、よくあるやつと違いセーバー起動中も時間で他のセーバーに切り替えられるようにした。
 一応まずはすでに公開されている他のソフトを物色してみた。で、幾つか求める機能を持ったものも見付けたのだが、試してみると動作にちょっと怪しい所があったり、インターフェースが今いちだったり、何かしら不満点が。
 ということで、ぼちぼち新しいソフトも作ってみたかったこともあり自作してみた次第。


 しかし機能的には結構シンプルなものなのに、実際作り始めたら最初に考えていたほど簡単ではなかった。いや、確かに基本的な処理は簡単に組めたんだけど、特にスクリーンセーバーを切り替える処理が結構面倒な手順を踏む必要があることが分かった。
 切り替えというのは、要は前に動作してたセーバーを止めて次のセーバーを起動するという処理になる訳だけど、セーバーによって起動と終了にかかる時間が違うので、その辺を考慮しないと下手すると2重3重にセーバーが動作している状態に陥ってしまったり、次のセーバーが起動されず終了してしまったりするのだ。
 ということで、切り替えの時は前のセーバーが確実に終了したことを確認してから次のセーバーを起動する、あとセーバーを起動する時もそれがちゃんと表示を始めた事を確認してからタイマーを設定するという工夫も必要だった。
 この確認処理に若干試行錯誤が必要で、時間と手間が一番かかった所である。途中で結構面倒なことをやってみたりしたが、最終的に落ち着いた方法は割とシンプルな処理だった。
 プログラマー向けにヒントを書いておくと(おを偉そうw)、セーバーの起動はCreateProcess()を使いプロセスIDを取っておく、そしてEnumWindows()とGetWindowThreadProcessId()を使ってウィンドウが開いたか/閉じたかを確認する、という感じです。
 ちなみにセーバーの終了させ方は、マウス移動・ESCキーDOWN送信・WM_CLOSE送信の3種類をやってます。単純にマウス移動だけじゃ終わらなかったり、WM_CLOSEイベントに対する処理を用意していないプログラムも中にはあるもんで。
 正直言うと、まだこれでも処理的に完全じゃない気はする。(^^;) スクリーンセーバーには色々あって、一筋縄では行かないです。世の中全種類のセーバーを試す訳にもいかないので、とりあえず自分の集めたセーバーで一通り動作確認して、それなりに動くようには頑張ってみました。(^^;)

コメント

コメントする