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