Declare Function SystemParametersInfo Lib "user32" Alias _
"SystemParametersInfoA" (ByVal uAction As Long, _
ByVal uParam As Long, _
ByVal lpvParam As Any, _
ByVal fuWinIni As Long) As Long
Public Const SPI_SETDESKWALLPAPER = 20
Public Const SPIF_SENDWININICHANGE = &H2
Public Const SPIF_UPDATEINIFILE = &H1
Sub Sample()
Dim WSH, WPaper As String, re
WPaper = "C:\Sample.bmp"
''レジストリに書き込み
Set WSH = CreateObject("WScript.Shell")
WSH.RegWrite "HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper", WPaper, "REG_SZ"
Set WSH = Nothing
''更新
re = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, ByVal WPaper, _
SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE)
End Sub
実は[プロパティ]ダイアログボックスでJPG画像を指定した場合、Windowsが自動的にBMP形式へと変換してくれているのです。Windowsが変換したファイルは「C:\Documents and Settings\<ユーザー名>\Local Settings\Application Data\Microsoft\Wallpaper1.bmp」として保存され、そのBMPファイルが壁紙に設定されます。
ネットを検索してみたのですが、これが意外に難しいとわかりました。APIなどで一発…と期待していたのですが、どうやらそんな便利なAPIはないそうです。ちなみに、Visual Studio 2005なら、かなり便利にできそうなことも書いてありました。そのうち試してみましょう。そんな中で見つけたのがKBC.DLLというオンラインソフトです。解説によると