让你的桌面墙纸自动更新
文/夏斌 李光明 (2000/08/22 )
每次启动Windows 98后,呈现在你面前的都是一层不变的墙纸,你一定有些厌倦了吧;如果每次都进行手动设置,又未免有些太麻烦了。为此,我们利用Visual
Basic 6.0编制了一个小程序,通过修改windows 98注册表中的键值,实现每次开机时墙纸自动进行更新。
利用Visual Basic编程进行墙纸的更换,通常都是通过调用Windows所提供的API(Application
Programming Interface)函数SystemParametersInfo来实现的。但是,SystemParametersInfo函数只能显示BMP文件。然而,现在许多精美的图像大多是以JPG格式存放的,对此,SystemParametersInfo函数就无能为力了。如果对Windows的注册表有所了解,那么你可以使用Windows文件夹中的登录编辑程序Regedit.exe查看Windows98的注册表中墙纸(WallPaper)的属性项(HKEY_USERS\.DEFAULT\Software\Microsoft\Internet
Explorer\Desktop\General)。墙纸的设置即存放于此处,墙纸的属性值即墙纸所对应的图像文件的路径及文件名。由此可以想到:只要修改该属性值图像文件的路径和文件名就可以改变墙纸。使用Visual
Basic 6.0如何修改注册表中的WallPaper属性值呢?当然是利用功能强大的API函数。查找有关Win32 API的编程手册,可以找到许多有关对注册表进行操作访问的API函数,为了解决前述问题,应选择如下函数:
① RegOpenKey,其功能是打开一个现有的注册表项(或键);
② RegSetValueEx,其功能是设置指定项(或键)的值(Value);
③RegCloseKey,其功能是关闭系统注册表中已打开的一个项(或键)。
有了这三个API函数,使用以下句子,即可方便地对墙纸进行设置:
lpSubKey = ".DEFAULT\Software\Microsoft\Internet
Explorer\Desktop\General"
lReturn = RegOpenKey(hKey, lpSubKey, lHandle)
lReturn = RegSetValueEx(lHandle, "Wallpaper", Reserved,
1&, ByVal JpgName, LenB(StrConv(JpgName, vbFromUnicode)) +
1)
lReturn = RegCloseKey(lHandle)
其中,JpgName是作为墙纸的JPG文件的文件名。我们可以数字为文件名对JPG图像文件进行命名,并通过VB的随机函数选择某文件:
x = Int((5 - 1 + 1) * Rnd + 1)
JpgName = App.Path & Trim(Str(x))
& ".jpg"
以下源程序,就是根据以上思想具体实现墙纸的更换。程序要求所用的墙纸文件*.JPG与所生成的可执行文件存放在和同一目录下,并且墙纸文件命名为N.jpg(N为1~5的整数);将可执行文件安装在启动组中,即可实现每次随机设置你的墙纸。
在窗体的通用声明(General_Declarations)中,对API函数予以声明:
Private Declare Function RegOpenKey
Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal
hKey As Long, ByVal lpSubKey As String, phkResult As Long) As
Long
Private Declare Function RegSetValueEx Lib "advapi32.dll"
Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName
As String, ByVal Reserved As Long, ByVal dwType As Long, lpData
As Any, ByVal cbData As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll"
(ByVal hKey As Long) As Long
Private Sub Form_Load()
Dim hKey, Reserved, lHandle As Long
Dim lpType, lReturn As Long
Dim lpSubKey, JpgName As String
Dim x As Integer
'随机产生1个整数N,其中N∈(1~5)
Randomize
x = Int((5 - 1 + 1) * Rnd + 1)
JpgName = App.Path & Trim(Str(x)) & ".jpg"
Reserved = 0&
lpType = 1& '设置字符串值类型为REG_SZ
hKey = &H80000003 'HKEY_USERS的常数值
lpSubKey = ".DEFAULT\Software\Microsoft\Internet Explorer\Desktop\General"
lReturn = RegOpenKey(hKey, lpSubKey, lHandle)
If lReturn = 0 Then '表示成功
lReturn = RegSetValueEx(lHandle, "Wallpaper", Reserved,
1&, ByVal JpgName, LenB(StrConv(JpgName, vbFromUnicode)) +
1)
lReturn = RegCloseKey(lHandle)
End If
Unload Me
End Sub
以上程序在中文Windows98,Visual Basic 6.0上通过。