
新しい TechNet コラムへようこそ。このコラムでは、よく寄せられるシステム管理スクリプトに関する質問に Scripting Guys がお答えします。システム管理スクリプトについて質問がある場合は、scripter@microsoft.com (英語のみ) までお送りください。すべての質問に回答することはできないかもしれませんが、可能な限り対応いたします。
今日の質問 : スクリーン セーバーの待ち時間を変更することはできますか
| Q | Scripting Guy さん、よろしくお願いします。スクリプトを使用してスクリーン セーバーの待ち時間を変更することはできますか。 -- JN |
| A | JN さん、こんにちは。どういうわけか、スクリーン セーバー、壁紙、タスク バー、[スタート] メニューなど、Windows の設定やコンポーネントのこととなると、必ずと言っていいほど Microsoft のスクリプティング テクノロジが持ち出されます。WMI (特に Win32_Desktop クラス) では、そうした設定の多くを読み取ることはできますが、Win32_Desktop クラス (またはこれに相当するクラスやオブジェクト) で設定を変更することはできません。なぜでしょうか。実は私もはっきりとした理由はわかりません。とにかく、そうなっているということです。 ただ、さいわいなことに、そうした設定の多くは Windows レジストリに保存されています。レジストリに保存されている設定を変更するスクリプトであれば、作成することは可能です。スクリーン セーバーの設定も例外ではありません。レジストリ エディタ (Regedit) を開き、HKEY_CURRENT_USER を展開してください。Control Panel\Desktop キーにはスクリーン セーバーに関連するレジストリ値があり、ScreenSaveTimeout も含まれています。もうおわかりかと思いますが、ScreenSaveTimeout はスクリーン セーバーが起動するまでの待ち時間を設定するレジストリ値です。既定値は 600 秒、つまり 10 分です。 では、この値を変更するにはどうすればよいかというと、次のようなスクリプトを使用します。ここでは、待ち時間を 5 分 (300 秒) に変更しています。 HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set objReg = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "Control Panel\Desktop"
objReg.CreateKey HKEY_CURRENT_USER, strKeyPath
ValueName = "ScreenSaveTimeout"
strValue = "300"
objReg.SetStringValue HKEY_CURRENT_USER, strKeyPath, ValueName, strValue
このスクリプトでは、まず HKEY_CURRENT_USER という定数を作成し、その値を &H80000001 に設定しています。これによって、WMI の Registry プロバイダに対し、レジストリの HKEY_CURRENT_USER 部分を操作することを指定しています。HKEY_LOCAL_MACHINE を操作する場合は、定数を &H80000001 に設定します。また、定数を &H80000003 に設定すると、HKEY_USERS を操作することができます。 このスクリプトはローカル コンピュータで実行するため、変数 strComputer をドット (ローカル コンピュータを意味する WMI ショートカット) に設定しています。ただし、Registry プロバイダの優れた点として、リモート コンピュータに対してもローカル コンピュータの場合とまったく同じように動作できることがあります。リモート コンピュータのスクリーン セーバーの待ち時間を変更する場合は、strComputer の値をそのコンピュータの名前に設定します。 次に、WMI サービスに接続し、レジストリ パス (Control Panel\Desktop) を指定します。その後で CreateKey メソッドを呼び出しています。これは万全を期すために行っているだけです。探しているレジストリ キーが存在しない場合は、CreateKey によってキーが作成されます。レジストリ キーが存在する場合は、CreateKey は何も行いません。 変更するレジストリ値の名前 (ScreenSaveTimeout) と新しい値 (300) を指定した後、SetStringValue メソッドを使用してタイムアウト値を 300 秒に変更します。 なかなかのものでしょう。Registry プロバイダ (おそらく正当に評価されていない WMI プロバイダの代表格の 1 つと言えるでしょう) の詳細については、『Microsoft Windows 2000 Scripting Guide』の「Registry」 (英語) を参照してください。また、いろいろな意味で有名な「Tweakomatic」もチェックしてください。Tweakomatic は、レジストリの読み取りおよび書き込みを行うスクリプトを作成するためのすばらしいユーティリティです。古いコマーシャルからの借用のようになりますが、名前に Tweakomatic が付いていさえすれば、優れたものに違いありません。 ここで、スクリーン セーバーの設定を管理する便利なスクリプトをもう 1 つ紹介します。スクリーン セーバーにパスワードを設定するスクリプトです。 HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set objReg = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "Control Panel\Desktop"
objReg.CreateKey HKEY_CURRENT_USER, strKeyPath
ValueName = "ScreenSaverIsSecure"
strValue = "1"
objReg.SetStringValue HKEY_CURRENT_USER, strKeyPath, ValueName, strValue
レジストリを操作するスクリプトのおもしろさを感じていただけたでしょうか。Tweakomatic には他にもスクリーン セーバーの設定を管理するスクリプトがあり、さらに [スタート] メニュー、タスク バー、エクスプローラのフォルダ設定など、あらゆるものを管理するスクリプトも用意されています。デスクトップの基本的な設定を管理するスクリプトが必要な場合は、まず Tweakomatic をチェックしてください。 |
Hey, Scripting Guy! - アーカイブ もチェックしてください。