2010年1月24日日曜日

昼食の時間だけスクリーンセーバをデフラグツールに変更する(改良版)

昨日紹介したスクリーンセーバー切り替え VBScript をマイナーチェンジしました。

新しいスクリプトでは、すでにスクリーンセーバーが起動していた場合は、それを強制終了させます。ここれにより、以下のような挙動になります。(スクリーンセーバーの設定が10分の場合)


■ スクリーンセーバー切り替え時に、すでにスクリーンセーバーが動作している場合


  • 基準時間: スクリーンセーバーの変更、および既存スクリーンセーバの停止

    →画面がロックされる

  • +10分: 再度タイムアウトによりスクリーンセーバーが起動される


■ スクリーンセーバー切り替え時に、スクリーンセーバーが動作していない場合


  • ユーザーがロックもしくは放置してから 10 分後にタイムアウトによりスクリーンセーバーが起動される


これにより、タスク設定時間より早めに休憩に入ってしまったとしても、お昼には確実にデフラグスクリーンセーバーを起動するようになりました。

なお、前回は Auglogics Disk Defrag を使用していましたが、今回のスクリプトは MyDefrag (JkDefragの後継) 向けとしてあります。


MyDefrag
http://www.mydefrag.com/





'
' スクリーンセーバを auslogics disk defrag に設定する
'

SS_DEFRAG = "C:\WINDOWS\system32\MYDEFR~1.SCR"

HKEY_CURRENT_USER = &H80000001
strComputer = "."

Set objReg = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "Control Panel\Desktop"
objReg.CreateKey HKEY_CURRENT_USER, strKeyPath
objReg.SetStringValue HKEY_CURRENT_USER, strKeyPath, "SCRNSAVE.EXE", SS_DEFRAG

' すでに別のスクリーンセーバ(logon.scr)が動作していたら、そのスクリーンセーバーを
' ストップさせる。
Set objShell = CreateObject("Wscript.Shell")
r = objShell.Run("taskkill /F /IM logon.scr", 1, True)

昼食の時間だけスクリーンセーバをデフラグツールに変更する

こんにちわ。みなさんお仕事は順調でしょうか?

客先の業務量減少に伴い、残業規制やらお昼時間の消灯やらでテンションだだ下がりなブログ主です。お昼の時間 12:00 になるとオフィスの照明が強制消灯されるので、最近は時間どおりに食事に出ることが多くなりました。おかげでお陰で最近、体重がいいかんじにry(関係ない

ところで、お昼の時間って、PCの電源が入ったままなので、この間にデフラグを流してる人なども多いのではないでしょうか。私は別にデフラグジャンキーじゃないのですが、職場のセキュリティポリシーに準じて導入しているツールがファイルをズタズタにしてくれるので、昼休みはデフラグすることにしようと思いました。



  • 使用するデフラグツール

  • スクリプトの作成とテスト

  • タスクの設定

  • 問題が発生……



■ 使用するデフラグツール

ほかに JkDefrag などの選択肢もあるわけですが、Auslogics Disk Defrag が最近のお気に入りなので、このスクリーンセーバーを使いたいと思います。

Auslogics Disk Defrag Screen Saver

http://www.auslogics.com/en/software/disk-defrag-screen-saver/

ただ、私は普段からデフラグスクリーンセーバーを設定するほどのデフラグジャンキーではありませんし、外出先でデフラグがかかると鬱陶しいので、時間指定でスクリーンセーバーを変更することにしました。

■ スクリプトの作成とテスト

まず、スクリーンセーバーを変更する VBScript を 2 つ書きます。

C:\hasegaw\bin\TASK_SCREENSAVER_CHANGER_DEFRAG.vbs …… スクリーンセーバをデフラグツールに

C:\hasegaw\bin\TASK_SCREENSAVER_CHANGER_LOGON.vbs …… スクリーンセーバを普段のものに

以下にスクリプトの例を示します。

C:\hasegaw\bin\TASK_SCREENSAVER_CHANGER_DEFRAG.vbs

'
' スクリーンセーバを auslogics disk defrag に設定する
'

SS_DEFRAG = "C:\Windows\aus_ddss.scr"

HKEY_CURRENT_USER = &H80000001
strComputer = "."

Set objReg = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "Control Panel\Desktop"
objReg.CreateKey HKEY_CURRENT_USER, strKeyPath
objReg.SetStringValue HKEY_CURRENT_USER, strKeyPath, "SCRNSAVE.EXE", SS_DEFRAG

C:\hasegaw\bin\TASK_SCREENSAVER_CHANGER_LOGON.vbs

'
' スクリーンセーバを login.scr に設定する
'

SS_DEFRAG = "C:\Windows\SYSTEM32\logon.scr"

HKEY_CURRENT_USER = &H80000001
strComputer = "."

Set objReg = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "Control Panel\Desktop"
objReg.CreateKey HKEY_CURRENT_USER, strKeyPath
objReg.SetStringValue HKEY_CURRENT_USER, strKeyPath, "SCRNSAVE.EXE", SS_DEFRAG

これらのスクリプトを書いたら、スクリプトが期待通りに動作するかを確認します。


  • 画面のプロパティーを開き、スクリーンセーバーを なし に設定してプロパティを閉じる

  • TASK_SCREENSAVER_CHANGER_DEFRAG.vbs をダブルクリックする

  • 画面のプロパティーを開き、スクリーンセーバーがデフラグツールに設定されたことを確認

  • TASK_SCREENSAVER_CHANGER_LOGON.vbs をダブルクリックする

  • 画面のプロパティーを開き、スクリーンセーバーが普段のものに設定されたことを確認

■ タスクの設定

スクリプトが問題なく動作することを確認したら、続いて Windows のタスクとしてこれらのスクリプトを設定します。


  • TASK_SCREENSAVER_CHANGER_DEFRAG


    • 実行するプログラム …… TASK_SCREENSAVER_CHANGER_DEFRAG.vbs

    • 実行日時/頻度 …… 毎日11:50

    • その他設定 …… ログオン時以外は実行しない

  • TASK_SCREENSAVER_CHANGER_LOGON


    • 実行するプログラム …… TASK_SCREENSAVER_CHANGER_LOGON.vbs

    • 実行日時/頻度 …… 毎日13:00

    • その他設定 …… ログオン時以外は実行しない

  • TASK_SCREENSAVER_CHANGER_LOGON2


    • 実行するプログラム …… TASK_SCREENSAVER_CHANGER_LOGON.vbs

    • 実行日時/頻度 …… ログオン時

    • その他設定 …… ログオン時以外は実行しない

これで、毎日 11:50~13:00にスクリーンセーバが変わるようになりました。

■ 問題が発生……

その後、 Auglogic Disk Defrag のスクリーンセーバを実際に動かしてみて、問題が判明。

このデフラグスクリーンセーバー、実行中はデフラグ対象のファイルの名前がリアルタイムで表示されてしまいます。(^^;;;

この状態でついうっかり「...\秘蔵エロ\...」とか「履歴書.doc」※とかのファイル名を職場の人間に見られると大変なことになってしまうのでちょっと常用はきついなぁ……。スクリーンセーバの設定をみてもこの挙動は変えられないみたい。

※ エロとか履歴書とかはネタだとしても、顧客名などの情報を含むファイル名がスクリーンセーバーにより表示されている状態というのは、普通に考えてもちょっと……。開発元はどういう神経で作ってるんでしょうね。