用C++Builder實(shí)現(xiàn)桌布自動(dòng)更新

字號(hào):

在C++ Builder中要實(shí)現(xiàn)桌布的自動(dòng)更換功能,我認(rèn)為主要兩個(gè)關(guān)鍵點(diǎn),其一既然要“自動(dòng)”那就免不了要用到定時(shí)器,我們可以用Timer這個(gè)組件來(lái)完成,這個(gè)還好解決,第二個(gè)問(wèn)題可能比較麻煩了,我們?nèi)绾蝸?lái)設(shè)置桌布,好像BCB中并沒(méi)有提供什么組件,那我們也就只好自力更生了,雖說(shuō)本人只是一只菜鳥(niǎo),但這個(gè)問(wèn)題還是難不了我,它主要是用到了SystemParametersInfo 這個(gè)Windows API函數(shù),它的聲明如下:
    BOOL SystemParametersInfo(
    UINT uiAction, // system parameter to query or set
    UINT uiParam, // depends on action to be taken
    PVOID pvParam, // depends on action to be taken
    UINT fWinIni // user profile update flag
    );
    它是一個(gè)非常重量級(jí)的函數(shù),主要用來(lái)設(shè)置或獲得系統(tǒng)范圍上的相關(guān)參數(shù)(如:我正在介紹的“如何設(shè)置桌布”,還有如:系統(tǒng)字體,屏幕分辨率等),其實(shí)光從字面上也能大概知道它的作用。如果只是簡(jiǎn)單的調(diào)用SystemParametersInfo函數(shù)的話,問(wèn)題就變得簡(jiǎn)單多了,但你要總不能只使用默認(rèn)的桌布樣式,所以在設(shè)置桌布之前還應(yīng)先設(shè)置好桌布的樣式,比如:桌布的顯示位置,是否填滿(mǎn)桌面等,然后再調(diào)用SystemParametersInfo函數(shù),這個(gè)函數(shù)會(huì)根據(jù)注冊(cè)表里的桌布樣式設(shè)置情況來(lái)設(shè)置實(shí)際的桌布樣式。
    與桌布樣式有關(guān)的注冊(cè)表設(shè)定:(位于HKEY_CURRENT_USER\Control Panel\Desktop鍵)
    注意:
    其實(shí),上表還漏了TileWallpaper鍵,這個(gè)設(shè)定值的優(yōu)先級(jí),即當(dāng)TileWallpaper這個(gè)值為1時(shí),不管其它參數(shù)為何值,都會(huì)將桌布填滿(mǎn)桌面,為了簡(jiǎn)化程序,一般將其設(shè)置為0,然后在根據(jù)WallPaperStyle來(lái)設(shè)置桌布樣式,這是比較明智的做法。