看着大儿子的照片,突然想要将所有儿子的照片都作为墙纸。而且打算每次开机都换一张照片作为桌面。
所以就查了查资料,做了一个桌面的自动更新程序,只要将其快捷方式放入启动组内就可以了。
下载地址为:http://download.csdn.net/source/544487
下面说说代码吧:
SetKeyValue和SetValueEx是在网上抄来的对注册表进行操作的函数,最后一个setDesktop的函数就是将你的图片地址imgstr直接设置为墙纸的函数了。
Private Sub SetKeyValue(sKeyName As String, sValueName As String, vValueSetting As Variant, lValueType As Long, lPredefinedKey As Long)
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)
RegCloseKey (hKey)
End Sub
Private Function SetValueEx(ByVal hKey As Long, sValueName As String, lType As Long, vValue As Variant) As Long
Dim lValue As Long
Dim sValue As String
Select Case lType
Case REG_SZ
sValue = vValue & Chr$(0)
SetValueEx = RegSetValueExString(hKey, sValueName, 0&, lType, sValue, Len(sValue))
Case REG_DWORD, REG_BINARY
lValue = vValue
SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, lType, lValue, 4)
End Select
End Function
Private Sub setDeskImage(index As Long)
'写入注册表
If index = 1 Then
'设定居中
SetKeyValue "Control Panel/desktop", "TileWallpaper", "0", REG_SZ, HKEY_CURRENT_USER
SetKeyValue "Control Panel/desktop", "WallpaperStyle", "0", REG_SZ, HKEY_CURRENT_USER
'设定平铺
ElseIf index = 2 Then
SetKeyValue "Control Panel/desktop", "TileWallpaper", "0", REG_SZ, HKEY_CURRENT_USER
SetKeyValue "Control Panel/desktop", "WallpaperStyle", "2", REG_SZ, HKEY_CURRENT_USER
ElseIf index = 3 Then
'设定拉伸
SetKeyValue "Control Panel/desktop", "TileWallpaper", "1", REG_SZ, HKEY_CURRENT_USER
SetKeyValue "Control Panel/desktop", "WallpaperStyle", "0", REG_SZ, HKEY_CURRENT_USER
End If
'更换墙纸
ChangeWP = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, imgstr , SPIF_UPDATEINIFILE )
'在注册表中记录图片位置
SetKeyValue "Control Panel/desktop", "Wallpaper", imgstr , REG_SZ, HKEY_CURRENT_USER
End Sub
上面的方法完全可以立即进行墙纸的变换,但是不知道为什么对于居中/对称/平铺的设置并不能立即见效。
于是在我提供的下载链接中,我是用了IActiveDesktop和相应的tlb才实现立即变换桌面显示的模式(居中/对称/平铺)。
但我想很多人都没有这个需求,所以就不再介绍了,上面的应该可以满足大多数人的要求了。:)
完