スクリーンセーバーを起動しないようにするには

スクリーンセーバーを起動しないようにするには

では起動しているあいだスクリーンセーバーを起動しないようにしました。今回は特定のアプリケーションが起動しているときのみスクリーンセーバーの起動を抑止します。

フォーム上に「Target」と書かれたイメージがあります。これを他のアプリケーションのウィンドウにドラッグするとテキストボックスにプロセス名が表示されます。追加をクリックするとそのアプリが起動しているときはスクリーンセーバーが起動しなくなります。逆に「除去」をクリックすると登録を解除することもできます。

マウスがクリックされたらカーソルを変更します。カーソルはTargetBitmapからつくります。

ビットマップイメージからカーソルをつくるクラスです。CreateCursorメソッドでカーソルを生成します。

マウスが離されたらProcessNameFromPointクラスを利用して、マウスポインタが乗っているウィンドウのプロセス名を取得します。取得したプロセス名をテキストボックスに表示します。

ProcessNameFromPointクラスは以下のとおりです。マウスポインタの座標からウィンドウハンドルを取得します。そしてウィンドウハンドルからプロセスIDを取得してプロセスIDからプロセス名を取得します。

追加ボタンが押されたらProcessNames(プロセス名と同じプロセスが実行されている場合、スクリーンセーバー起動を抑止する)にプロセス名を格納します(すでに同じプロセス名が格納されている場合はなにもしない)。そしてリストボックスにもプロセス名一覧を表示させます。

さらにこのとき現在実行されているプロセス名をすべて調べて新しく追加されたプロセス名のものが実行されているのであれば、スクリーンセーバーの起動を抑止している旨を表示させます。

除去がクリックされたらテキストボックスに表示されているプロセス名をProcessNamesから削除します。そしてリストボックスのアイテムからも削除します。

このとき現在実行されているプロセス名をすべて調べてリストボックス内に存在するプロセス名のものが実行されていないのであれば、スクリーンセーバーの起動が抑止されていない旨を表示させます。

タイマーをセットして1分以内に1回 Tickイベントを発生させます。このとき実行されているプロセスの名前のなかにリストボックス内に存在するプロセス名のものがあれば、スクリーンセーバーの起動を抑止します。

またスクリーンセーバーの起動を抑止されているとき、されていない場合はその旨を表示します(TickイベントとTickイベントのあいだにリストボックス内に存在する名前のプロセスが終了されることがある。その場合、抑止されていない旨が表示されるまでタイムラグが存在するのだが、まあいいんじゃないかな?)。

自作メソッド PreventScreenSaverFromStartingの内容は

スクリーンセーバーを起動しないようにするには

を参照してください。

リストボックスで選択されているアイテムが変更されると、選択されているアイテムがテキストボックスに表示されます。このとき「除去」をクリックすると、選択されていたプロセス名をスクリーンセーバーの起動を抑止するリストから除去することができます。