【VBScript】デスクトップの壁紙を設定する

Yahoo!知恵袋から、VBScriptでデスクトップの壁紙を設定するにはどうするか、紹介します。

レジストリをいじりますので、最悪システムが動かなくなることがあります。使用の際にはあらかじめレジストリのバックアップをとっておくなど、注意してください。

質問

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10272019065

VBScriotで、デスクトップの壁紙を設定するコードを教えて下さい。

Windows10使用です。デスクトップの大きさに合わせて、画像を伸縮させて表示する方法で、設定する方法はあるのでしょうか?

使用するファイルは、C:/test/test.jpgとします。

レジストリに変化を加える方法でも構いません。 よろしくお願いします。

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10272019065

回答

壁紙の設定をバッチで変える方法は、あちこちのサイトにいくつか紹介されていましたが、いずれもPowerShellやコマンドプロンプトや、C#などであって、VBScriptで実装したものはなかったので、考えました。

Option Explicit
Main
Sub Main()

	Dim ws,ii,sPath,lNum

	'WSHオブジェクトの作成
	Set ws = CreateObject("WScript.Shell")

	'画像ファイルの指定
	sPath = "C:\test\test.jpg"        '-----①

	'設定反映の回数
	lNum = 10                         '-----②

	'変更前の値を確認
	DisplayWallPaper(ws)

	'レジストリの変更
	ws.RegWrite "HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper", sPath, "REG_SZ"        '-----③
	ws.RegWrite "HKEY_CURRENT_USER\Control Panel\Desktop\WallpaperStyle", 6, "REG_SZ"        '-----④
	For ii= 0 To lNum
		ws.Run "%windir%\System32\RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters", 1, True    '-----⑤
	Next

	'変更後の値を確認
	DisplayWallPaper(ws)

	'終了する
	WScript.Quit
End Sub

Sub DisplayWallPaper(ByRef ws)

	Dim sm1,sm2,sm3

	sm1 = ws.RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\WallPaper")       '-----⑥
	sm2 = ws.RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\WallpaperStyle")        '-----⑦
	sm3 = ws.RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\TileWallpaper")        '-----⑧

	WScript.Echo "Wallpaper:" & sm1 & vbCrLf & "WallpaperStretched:" & sm2 & vbCrLf & "WallpaperTiled:" & sm3

End Sub

解説

①のsPathで、壁紙にしたい画像ファイルをフルパスで指定します。

②のlNumは10としましたが、これは設定を反映させるための回数です。レジストリの値を書き換えてもすぐには設定は反映されません。何回かトライしてやっと反映されます。回数は、3回でよいときもあれば、20回やってやっと反映されたときもありました。この辺の値は、適宜変えてください。

③レジストリの値を書き換えています。一度に1つしか書き換えることができないので、まずは壁紙ファイルを変更しています。

④レジストリの値を書き換えています。一度に1つしか書き換えることができないので、ここでは壁紙の調整方法を変更しています。

レジストリWallPaperと壁紙の設定の関係

中央に表示の場合は、0です。

画面のサイズに合わせる場合は、6です。

今回、質問者様が、「デスクトップの大きさに合わせて、画像を伸縮させて表示する方法」をご希望だったので、6にしました。

⑤が設定をシステムに反映させるためのコマンドです。レジストリの設定を変えてもすぐにはシステムに反映しません。そこで、システムに値を反映させるための命令を発しているのですが、これがなかなか言うことを聞いてくれません。そこで、ループの中で何回か同じことを繰り返し命令しています。

⑥から⑧までは壁紙の設定のレジストリの値を読み込んでいます。

使い方

管理者権限で実行してください。

管理者権限で実行するには、Shiftキーを押しながら右クリック→「管理者として実行」です。

Shiftキーを押しながら右クリック