使用Visual Basic 5.0很容易建立屏幕保護程序。實際上任何VB應用程序都可以作為屏幕保護程序來運行,只是有的程序更適於作為屏幕保護程序。要想使自己的應用程序成為Windows環境中屏幕保護程序,需要將該程序作為屏幕保護程序來編譯。具體方法是:從File 菜單上選定Make EXE File,在Make EXE File對話框中作以下改動:不再建立帶擴展名為EX E的可執行文件,而是把擴展名改為SCR。
下面討論一下在設計屏幕保護程序時應注意的幾個問題。
Visual Basic提供了一個App對象,它有一個PreInstance屬性,如果當前已經有一個Vi sual Basic應用程序的實例在運行,就可把該屬性設置為True,從而避免同時運行一個屏幕保護程序的多個實例。
下面的代碼顯示App.PreInstance在屏幕保護程序中的實現:
If App.PreInstance=True then
Unload Me
Exit Sub
End If
此外,還有一種更好的方法可以避免同時運行一個屏幕保護程序的多個實例。使用一個通知操作系統已經有一個屏幕保護程序被激活的Windows95 API函數SystemParametersInfo ,其聲明如下:
Private Declare Function SystemParametersInfo Lib “user32” Alias “SystemP arametersInfoA” (
ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, ByVal fuWinIni As Long ) As Long
在窗體加載事件的開始對這個函數調用一次,並在窗體卸載事件期間再調用一次。這兩個調用必須成對出現並且二者必須在屏幕保護程序的執行期間進行調用。
以下是在窗體加載事件中對該函數的調用:
x=SystemParametersInfo(17,0,ByVal 0&,0)
以下是在窗體卸載事件中對該函數的調用:
x=SystemParametersInfo(17,1,ByVal 0&,0)
ShowCursor API函數允許在Visual B c應用程序中隱藏或顯示鼠標光標,Windows通過更改一個計數變量來跟蹤鼠標光標的可視性:每次用參數值True調用ShowCursor使該計數遞增,用參數值False調用ShowCursor使該計數遞減,如果該計數為0或者更小,鼠標光標就自動隱藏起來。以下是ShowCursor API函數的聲明:
Private Declare Function ShowCursor Lib “user32” (ByVal bShow As Long ) As Long
下面是兩個使用ShowCursor函數的例子。
顯示鼠標光標:
Private Sub ShowMouse()
While ShowCursor(True)<=0
Wend
End Sub
隱藏鼠標光標:
Private Sub HideMouse()
While ShowCursor(False)>0
Wend
End Sub
MouseMove事件用來檢測鼠標的移動,當應用程序啟動時,甚至在鼠標實際上並未移動的情況下,MouseMove事件都會觸發一次。所以第一次觸發MouseMove事件時,只是記錄鼠標當前位置,僅當鼠標真正從其起始位置移開時,才終止屏幕保護程序。具體實現代碼如下:
Private Sub Form_MouseMove(Button As Integer,Shift As Integer, X As Single, Y As Single)
Static XLast, YLast As Single
Dim XNow, YNow As Single
記錄當前位置
XNow = X
YNow = Y
第一次觸發MouseMove事件,記錄當前位置
If XLast = 0 And YLast = 0 Then
XLast = XNow
YLast = YNow
Exit Sub
End If
僅當鼠標移動足夠迅速(一次2個像素以上)才恢復屏幕 If Abs(XNow - XLast) > 2 Or Abs(YNow - YLast) > 2 Then
QuitFlag = True
End If
End Sub
Form_Click事件用來檢測鼠標單擊,Form_Click事件的具體代碼如下:
Private Sub Form_Click()
鼠標單擊,結束屏幕保護程序
QuitFlag=True
End Sub
Form_KeyDown事件用來檢測鍵盤的活動,當按下任何一個鍵(包括Shift鍵)時,都能結束屏幕保護程序。Form_KeyDown事件的具體代碼如下:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
按下鍵盤,結束屏幕保護程序
QuitFlag = True
End Sub
通常,屏蔽保護程序中幾個重要屬性設置值如下:Form窗體BorderStyle為0-None,Co ntrolBox為False,KeyPreview為True,MaxButton和MinButton為False,WindowState為2-Maximized,定義窗體級變量QuitFlag(Dim QuitFlag as Boolean)。Timer控件(在Form窗體中)Enabled屬性在設計環境中設置為False。
本文給出一個完整的屏幕保護程序實例,其演示效果為:把當前的顯示復制到一個全屏幕的窗體中,然後隨機地在屏幕上畫一些實心彩色小圓,並隨機顯示彩色字樣“Baby,I love you!”。同時,在屏幕底部有一移動的圖片框,讀者可以在設計環境中添加自己喜歡的圖片。在本屏幕保護程序中,設置Timer控件的Name屬性為tmrExitNotify;在窗體底部添加一個PictureBox控件,設置其Name屬性為picture1。
在調試本程序時,有一技巧值得說明,可將Form_Load事件中Select Case…End Select 語句稍作修改如下:
●將Case “/S”注釋掉,在其下添加Case Else語句;
●將Case Else/Unload Me/Exit Sub三條語句注釋掉。
這樣,可在VB5.0環境下調試本程序,並預覽演示效果。在調試完成後,再將上述修改恢復原樣,編譯成後綴為.SCR的文件,即可得到屏幕保護程序。