top
Loading...
自動更換墻紙的小程序
應用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屬性來改變間隔時間的長短。這樣就能看到不斷變化的桌面了。

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗