如何改变桌面的图片?

原始来源:王国荣

Const SPI_SETDESKWALLPAPER = 20
Const SPIF_UPDATEINIFILE = &H1
Private 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


 Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, BMP图档名称,  _
	 SPIF_UPDATEINIFILE)
 例如: 将桌面图片设定成 c:\windows\setup.bmp
 Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "c:\windows\setup.bmp", _
			   SPIF_UPDATEINIFILE)

 将桌面图片清掉
 Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "", SPIF_UPDATEINIFILE)


但以上程式设定图片之後, 必须等到下次 Windows 重新启动时才生效, 如果希望设定
之後立刻生效, 则程式须修改如下:
Const SPIF_SENDWININICHANGE = &H2
Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "c:\windows\setup.bmp", _
			   SPIF_UPDATEINIFILE + SPIF_SENDWININICHANGE )

此外希望只有本次使用 Windows 时改变桌面图片(下次开机时还原原状), 则
程式如下:

Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "c:\windows\setup.bmp", _
			  SPIF_SENDWININICHANGE ) ' 去掉 SPIF_UPDATEINIFILE

上述方法并不能设定图片的显示方式(包含「置於中央」、「并排」、及「展开」)
怎样让在改变桌面图片时, 也设定显示方式呢?

方法就是在呼叫 SystemParametersInfo 之前, 利用改变登录资料库的以下设定值:

    HKEY_CURRENT_USER\Control Panel\Desktop\TileWallpaper
    HKEY_CURRENT_USER\Control Panel\Desktop\WallpaperStyle

这两个设定值的意义如下:

展开
TileWallpaper的设定值 WallpaperStyle的设定值 显示方式
"0" "0" 置於中央
"0" "2" 并排显示
"1" - 展开

注:所谓「展开」是当图片与萤幕不等大时, 将图片调整成语萤幕等大小, 这是 Windows 98 新增的
   功能, 但如果您的机器安装有 IE 4.x, 则 Windows 95 也具备相同的功能。