主题:vb如何实现双击程序就换壁纸?
animo
[专家分:0] 发布于 2008-06-10 14:55:00
我这里有一张桌面壁纸,我想用VB实现双击一下生成的应用程序遍换壁纸,请问应该怎么写?谢谢了
回复列表 (共3个回复)
沙发
老大徒伤悲 [专家分:29120] 发布于 2008-06-10 16:49:00
SystemParametersInfo函数
板凳
一江秋水 [专家分:9680] 发布于 2008-06-10 16:59:00
可以使用API函数:
Const SPI_SETDESKWALLPAPER = 20
Const SPIF_UPDATEINIFILE = &H1
Const SPIF_SENDWININICHANGE =&H2
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
第一个参数:uAction是用来动作设置的,该参数分GET和SET两种行动,有约80种不同的参数设置,其中
设置墙纸的参数为 SPI_SETDESKWALLPAPER。
第二个参数:uParam的设置是随第一个参数的设置作相应调整的。这里置空值。
第三个参数:lpvParam是用来设置要更换上去的图片路径。该参数的设置也是随第一个参数作相应调整的。
第四个参数:fulWIni规定了在设置系统参数的时候,是否更新用户设置参数。可以是零(禁止更新),或下
述任何一个参数:
SPIF-UPDATEINIFILE:更新WIN.INI和注册表中的用户配置文件。
SPIF-SENDWININICHANGE:倘若也设置了SPIF-UPDATEINIFILE,将一条 WM-WININICHANGE消息
发给所有应用程序,否则没有作用。这条消息告诉应用程序已经改变了用户配置设置。
在窗体的Click事件中输入以下代码:
Dim tPath As String
tPath = "c:\windows\CIRCLES.bmp" '假设你的图片是 c:\windows\CIRCLES.bmp
SystemParametersInfo SPI_SETDESKWALLPAPER, 0,tPath, SPIF_UPDATEINIFILE
但以上代码设定图片之后,必须等到下次Windows重新启动时才生效,如果要设定之后立刻生效,
则代码须修改如下:
SystemParametersInfo SPI_SETDESKWALLPAPER, 0, tPath, SPIF_SENDWININICHANGE or SPIF_UPDATEINIFILE
此外,如果只要本次改变桌面图片,下次开机时恢复原图,则代码如下:
SystemParametersInfo SPI_SETDESKWALLPAPER, 0, tPath, SPIF_SENDWININICHANGE
3 楼
tanchuhan [专家分:15140] 发布于 2008-06-10 17:38:00
[quote]在窗体的Click事件中输入以下代码:
Dim tPath As String
tPath = "c:\windows\CIRCLES.bmp" '假设你的图片是 c:\windows\CIRCLES.bmp
SystemParametersInfo SPI_SETDESKWALLPAPER, 0,tPath, SPIF_UPDATEINIFILE
但以上代码设定图片之后,必须等到下次Windows重新启动时才生效,如果要设定之后立刻生效,
则代码须修改如下:
SystemParametersInfo SPI_SETDESKWALLPAPER, 0, tPath, SPIF_SENDWININICHANGE or SPIF_UPDATEINIFILE
此外,如果只要本次改变桌面图片,下次开机时恢复原图,则代码如下:
SystemParametersInfo SPI_SETDESKWALLPAPER, 0, tPath, SPIF_SENDWININICHANGE[/quote]
你有点细节错了,这样会清除壁纸的
1、应该改一下声明,声明为字符串:
Private Declare Function SystemParametersInfo Lib “user32"Alias _
"SystemParametersInfoA"(ByVal uAction As Long,ByVal uParam As Long, _
ByVal lpvParam As [color=0000FF]String[/color],ByVal fuWinIni As Long) As Long
2、或者把声明改为UNICODE版本的API,并传送VB字符串指针进去(因为VB的字符串是UNICODE形式的):
Private Declare Function SystemParametersInfo Lib "user32" Alias _
[color=FF00FF]"SystemParametersInfoW"[/color] (ByVal uAction As Long, ByVal uParam As Long, _
ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long
SystemParametersInfo SPI_SETDESKWALLPAPER, 0, [color=0000FF]StrPtr(sPath)[/color], SPIF_SENDWININICHANGE Or SPIF_UPDATEINIFILE
3、或者不改声明,把字符串改为ANSI形式,并传递字符串指针:
SystemParametersInfo SPI_SETDESKWALLPAPER, 0, [color=FF00FF]StrPtr(StrConv(sPath, vbFromUnicode)), [/color]SPIF_SENDWININICHANGE Or SPIF_UPDATEINIFILE
我来回复