トップ回答者
Windows7の”個人設定”の指定をコマンドでできませんか?

質問
回答
-
壁紙やスクリーンセーバーなどの設定はレジストリ(HKEY_CURRENT_USER\Control Panel\Desktop)に保存されています。
なので基本的にはそれらのレジストリ値をスクリプトから変更してやることで可能です。レジストリ値の変更はSet-ItemPropertyコマンドレットなどで行います。
しかしこれらの設定に対応するレジストリ値を変更するだけでは、リアルタイムに設定を反映させることができません。たとえば壁紙なら次回ログオン時からは変更されますが、レジストリを書き換えた直後は見た目の変化はありません。
そこでレジストリ設定を変更したことを、システムに通知するコマンドを実行する必要があります。それには
rundll32.exe user32.dll,UpdatePerUserSystemParameters
というコマンドがXP時代には使えたのですが、Win7では使用できなくなっているようです。
では方法がないかというとそうでもなくて、Win32APIにあるSystemParametersInfo関数を呼び出すことでリアルタイムに壁紙やスクリーンセーバーを変更することができます。PowerShellのAdd-Typeコマンドレットを使用すればWin32APIを直接利用することが可能です。その参考例としてPowerShell Code Repository - Set-Wallpaper (CTP3)などがありました。これは壁紙を変更する関数ですが、スクリーンセーバーなど他の設定についても対応するレジストリ設定を行い、SystemParametersInfo関数を使えば可能ではないかと思います。
- 回答としてマーク karankoron 2011年12月12日 10:03
すべての返信
-
壁紙やスクリーンセーバーなどの設定はレジストリ(HKEY_CURRENT_USER\Control Panel\Desktop)に保存されています。
なので基本的にはそれらのレジストリ値をスクリプトから変更してやることで可能です。レジストリ値の変更はSet-ItemPropertyコマンドレットなどで行います。
しかしこれらの設定に対応するレジストリ値を変更するだけでは、リアルタイムに設定を反映させることができません。たとえば壁紙なら次回ログオン時からは変更されますが、レジストリを書き換えた直後は見た目の変化はありません。
そこでレジストリ設定を変更したことを、システムに通知するコマンドを実行する必要があります。それには
rundll32.exe user32.dll,UpdatePerUserSystemParameters
というコマンドがXP時代には使えたのですが、Win7では使用できなくなっているようです。
では方法がないかというとそうでもなくて、Win32APIにあるSystemParametersInfo関数を呼び出すことでリアルタイムに壁紙やスクリーンセーバーを変更することができます。PowerShellのAdd-Typeコマンドレットを使用すればWin32APIを直接利用することが可能です。その参考例としてPowerShell Code Repository - Set-Wallpaper (CTP3)などがありました。これは壁紙を変更する関数ですが、スクリーンセーバーなど他の設定についても対応するレジストリ設定を行い、SystemParametersInfo関数を使えば可能ではないかと思います。
- 回答としてマーク karankoron 2011年12月12日 10:03