資源描述:
《實(shí)現(xiàn)真正的windows屏幕保護(hù)程序》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、實(shí)現(xiàn)真正的Windows屏幕保護(hù)程序屏幕保護(hù)程序是一種特殊的應(yīng)用程序,如果用戶打開了Windows的屏幕保護(hù)功能,而且在一特定的時間段內(nèi)沒有任何輸入,系統(tǒng)就回自動啟動屏幕保護(hù)程序。屏幕保護(hù)程序有兩個作用:1.防止屏幕長時間顯示靜態(tài)圖象而降低熒光介質(zhì)的壽命。2.防止用戶離開計算機(jī)時屏幕上的信息被不相干的人看到。相應(yīng)的,屏幕保護(hù)程序至少應(yīng)該實(shí)現(xiàn)以下兩個功能:1.動畫功能:顯示動態(tài)的圖象。2.密碼校驗(yàn)功能:退出程序時屏蔽一切系統(tǒng)熱鍵(Ctrl+Alt+Del,Alt+Tab,Ctrl+Esc等,避免用戶使用熱鍵關(guān)閉程序或切換到其它程序而跳過密碼校驗(yàn)),并要求
2、輸入授權(quán)密碼。我們可以找到不少介紹Windows屏幕保護(hù)程序的資料,也可以找到許多制作屏幕保護(hù)程序的工具。然而,由于不清楚Windows屏幕保護(hù)程序的密碼校驗(yàn)功能,所以它們實(shí)現(xiàn)的往往只是動畫功能,而沒有提供密碼校驗(yàn)功能。實(shí)際上,VisualC++已經(jīng)為我們準(zhǔn)備好了一個屏幕保護(hù)庫,使用它,我們可以非常容易的實(shí)現(xiàn)Windows屏幕保護(hù)程序的一切功能。介紹Windows屏幕保護(hù)庫Windows屏幕保護(hù)庫為我們提供了1.WinMain()函數(shù):完成程序初始化和消息調(diào)度??吹竭@里,可能有些讀者已經(jīng)想到了:我們不能在MFC中使用Windows屏幕保護(hù)庫。為什么呢?
3、原因很簡單:MFC的底層封裝了WinMain()函數(shù),如果在MFC中使用Windows屏幕保護(hù)庫,一個程序中就會有兩個WinMain()函數(shù),顯然說不過去。因此,我們只有使用Win32SDK了。2.DefScreenSaverProc()函數(shù):處理鍵盤、鼠標(biāo)等消息,實(shí)現(xiàn)屏蔽熱鍵及密碼校驗(yàn)等功能。3.一些函數(shù)、變量和常量的定義。大家可以在VisualC++安裝目錄的Include子目錄中找到SCRNSAVE.H文件,通過它,我們可以看到它們具體的定義。當(dāng)系統(tǒng)啟動一個屏幕保護(hù)程序時,WinMain()函數(shù)首先判斷系統(tǒng)傳遞的命令行參數(shù)。如果參數(shù)指示設(shè)置屏幕保
4、護(hù)程序,那么WinMain()函數(shù)將會用函數(shù)BOOLWINAPIScreenSaverConfigureDialog(HWNDhDlg,UINTmessage,WPARAMwParam,LPARAMlParam);來創(chuàng)建設(shè)置對話框并將用戶的輸入保存到注冊表中,還會用函數(shù)BOOLWINAPIRegisterDialogClasses(HANDLEhInst)來注冊設(shè)置對話框中的特殊窗口類或自定義控件類,如果沒有特殊窗口類和自定義控件類,RegisterDialogClasses()函數(shù)只需簡單的返回TRUE值。如果參數(shù)指示運(yùn)行屏幕保護(hù)程序,WinMain
5、()函數(shù)會調(diào)用一些初始化代碼來注冊窗口類并建立一個全屏窗口。而發(fā)送給屏幕保護(hù)程序的消息則由函數(shù)LRESULTWINAPIScreenSaverProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam);處理。我們可以在ScreenSaverProc()函數(shù)中處理下面幾個消息(當(dāng)然也可以處理其它消息):WM_CREATE從注冊表中獲取屏幕保護(hù)程序的設(shè)置信息創(chuàng)建一個計時器處理其它的初始化工作WM_TIMER處理繪制工作WM_DESTORY銷毀計時器處理其它銷毀工作ScreenSaverProc()函數(shù)未處理的消
6、息則傳遞給DefScreenSaverProc()處理。從這里我們可以看出,我們所要做的只是實(shí)現(xiàn)ScreenSaverProc(),ScreenSaverConfigureDialog()和RegisterDialogClasses()三個函數(shù),而麻煩的密碼校驗(yàn)和密碼更改已經(jīng)由DefScreenSaverProc()函數(shù)實(shí)現(xiàn)了!剩下的就是編譯并與Windows屏幕保護(hù)程序庫連接了。必須注意的是,Windows屏幕保護(hù)程序庫對資源ID有一些特殊的要求。首先,它要求有一個ID為IDS_DESCRIPTION(定義為#defineIDS_DESCRIPTIO
7、N1,見VisualC++目錄的IncludeSCRNSAVE.H文件),長度小于25的字符串資源,這個字符串將顯示在桌面屬性對話框屏幕保護(hù)程序列表框中。另一個要求是屏幕保護(hù)程序的設(shè)置對話框的ID必須為DLG_SCRNSAVECONFIGURE(定義為#defineDLG_SCRNSAVECONFIGURE2003)。下面我們來看一個屏幕保護(hù)程序框架的源程序:(筆者的開發(fā)環(huán)境為Windows98和VisualC++6.0,由于筆者沒有WindowsNT,故未考慮WindowsNT下的情況。)屏幕保護(hù)程序框架的源程序//////////////////
8、/////主程序///////////////////////#include"windows