回 帖 发 新 帖 刷新版面

主题:vb如何实现双击程序就换壁纸?

我这里有一张桌面壁纸,我想用VB实现双击一下生成的应用程序遍换壁纸,请问应该怎么写?谢谢了

回复列表 (共3个回复)

沙发

SystemParametersInfo函数

板凳

可以使用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 楼


[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

我来回复

您尚未登录,请登录后再回复。点此登录或注册