当前位置:文章首页 >> 程序设计 >> VB >> VB进阶 >> 自动更换墙纸的小程序
自动更换墙纸的小程序
2007-10-19 13:03:04  作者:佚名  来源:互联网  文字大小:【】【】【

  应用SystemParametersInfo函数可以获取和设置数量众多的windows系统参数。这个小程序就是运用了SystemParametersInfo函数来设置桌面的墙纸,而且程序可以让我们选择多幅墙纸图片,程序会以一定的时间间隔自动改变墙纸。

  ---------------------------------------------

  自动更换墙纸的小程序

  ---------------------------------------------

  SystemParametersInfo函数应用的一个例子

  ---------------------------------------------

  【VB声明】

Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByRef lpvParam As Any, ByVal fuWinIni As Long) As Long

  【说明】

  允许获取和设置数量众多的windows系统参数

  【返回值】

  Long,非零表示成功,零表示失败。会设置GetLastError

  【备注】

  在调用这个函数之前,特别要注意将lpvParam参数定义成正确的数据类型

  【参数表】

  uAction -------- Long,指定要设置的参数。参考uAction常数表

  uParam --------- Long,参考uAction常数表

  lpvParam ------- Any,按引用调用的Integer、Long和数据结构。对于String数据,请用SystemParametersInfoByval函数。具体用法参考uAction常数表

fuWinIni ------- Long,取决于不同的参数及操作系统,随同这个函数设置的用户配置参数保存在win.ini或注册表里,或同时保存在这两个地方。这个参数规定了在设置系统参数的时候,是否应更新用户设置参数。可以是零(禁止更新),或下述任何一个常数:

  SPIF_UPDATEINIFILE

  更新win.ini和(或)注册表中的用户配置文件

  SPIF_SENDWININICHANGE

  倘若也设置了SPIF_UPDATEINIFILE,将一条WM_WININICHANGE消息发给所有应用程序。否则没有作用。这调消息告诉应用程序已经改变了用户配置设置

  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
Dim flag As Boolean

  设置墙纸

  Const SPI_SETDESKWALLPAPER = 20

  更新windows ini 文件

  Const SPIF_UPDATEINIFILE = &H1
Const SPIF_SENDWININICHANGE = &H2

  当“添加墙纸”按钮被按下时

  Private Sub CmdAdd_Click()

  弹出通用对话框(打开文件)

  ComOpen.ShowOpen

  如果选择了墙纸图片则把图片的路径添加到列表框中去

  Listfile.AddItem ComOpen.FileName
End Sub

  当“退出程序”按钮被按下时,退出

  Private Sub CmdExit_Click()
Unload Me
End Sub

  窗体加载时

  Private Sub Form_Load()

  flag为布尔型变量,标示列表框中是否有文件存在

  flag = False

  设置自动更换墙纸的间隔时间,单位为毫秒,可以改变

  Timer1.Interval = 5000
End Sub

  当经历一定间隔时间,定时器TIMER被唤醒,执行指定任务

  Private Sub Timer1_Timer()

  如果列表框中没有图片,不进行任何操作

  If Listfile.ListCount = 0 Then
  Exit Sub

  否则把标示flag置为True

  Else: flag = True
  End If

  bmpfile为字符串变量,存储图片路径

  Dim bmpfile As String

  如果flag为真

  If flag Then

  从列表框中读取一个文件路径并赋值给bmpfile

  bmpfile = Listfile.List(Listfile.ListIndex)

  把墙纸更换为bmpfile所指图片,并修改INI文件

  SystemParametersInfo SPI_SETDESKWALLPAPER, 0, bmpfile, SPIF_UPDATEINIFILE

  如果已经是列表框中最后一张图片,把ListIndex设为0即第一张图片

  If Listfile.ListIndex = Listfile.ListCount - 1 Then
      Listfile.ListIndex = 0

  否则ListIndex加一,指向下一张图片

  Else
    Listfile.ListIndex = Listfile.ListIndex + 1
    End If
  End If
End Sub

  当“立即更换”按钮被按下时

  Private Sub CmdNow_Click()
  Dim bmpfile As String

  如果列表框中没有图片,不做任何操作

  If Listfile.ListCount = 0 Then End

  否则把选中的图片更换为墙纸

  bmpfile = Listfile.List(Listfile.ListIndex)
  SystemParametersInfo SPI_SETDESKWALLPAPER, 0, bmpfile, SPIF_UPDATEINIFILE
End Sub

  我们先来看看SystemParametersInfo函数的定义和参数:

  使用API函数之前必须先在程序中声明如下:

    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 Long指定要设置的参数。参考uAction常数表 uParam Long参考uAction常数表lpvParam Any按引用调用的Integer、Long和数据结构fuWinIni这个参数规定了在设置系统参数的时候,是否应更新用户设置参数

  下面是部分uAction参数,和使用它们的方法:

  参数意义使用方法6设置视窗的大小SystemParametersInfo(6, 放大缩小值, P, 0),lpvParam为long型17开关屏保程序SystemParametersInfo(17, False, P, 1),uParam为布尔型13,24改变桌面图标水平和垂直间距uParam为间距值(像素),lpvParam为long型15设置屏保等待时间SystemParametersInfo(15, 秒数, P, 1),lpvParam为long型20设置桌面背景墙纸SystemParametersInfo(20, True, 图片路径, 1) 93开关鼠标轨迹SystemParametersInfo(93, 数值, P, 1),uParam为False则关闭 97开关Ctrl+Alt+Del窗口SystemParametersInfo(97, False, A, 0),uParam为布尔型

  本例中我们选择图片并取得图片的完整路径,然后通过调用API函数,将这幅图设为墙纸,使用的语法为:SystemParametersInfo SPI_SETDESKWALLPAPER, 0, bmpfile, 1

  其中SystemParametersInfo表示要设置桌面墙纸,bmpfile是要设置的图片的路径。

  例中的定时自动更换是通过Timer控件实现的,我们可以调节Timer控件的Interval属性来改变间隔时间的长短。这样就能看到不断变化的桌面了。

相关文章

  •  ©  2006-2008 www.qq08.net 业务联系 广告刊登 QQ:517165800统计

  • 皖ICP备07000033号