本文介紹使用C#製做屏幕保護的方法,這個屏幕保護就是仿效視窗系統自帶的字幕屏保。html
屏幕保護程序的擴展名雖然是"scr",但實際上是一個可執行的"exe"文件。但他又是一個比較獨特的"exe"文件。下面就來探討一下,用C#是如何編寫屏幕保護服務器
的整個過程。this
一.本文中介紹的程序設計及運行環境設計
(1).微軟視窗2000 服務器版orm
(2)..Net Framework SDK 正式版htm
二.C#編寫字幕顯示屏保程序的關鍵步驟以及解決方法:blog
(1).設定程序的窗體符合屏幕保護的要求:事件
因爲屏幕保護程序就是一個可執行程序,因此在編寫屏幕保護程序的時候,首先按照可執行程序來設計。但屏幕保護有自身的特色。譬如:屏幕保護都是充滿string
整個屏幕的,而且沒有無邊。屏幕保護運行的時候,不能顯示任務欄。在程序設計中實現這些特色,關鍵就在於對窗體的某些屬性的設定上。下面是對窗體屬性的it
設定,就能夠知足屏幕保護的要求,具體以下:
this.Name = "ScreenSaver" ;
//窗體運行後無邊界
this.FormBorderStyle = FormBorderStyle.None ;
//程序運行後不顯示在任務欄上
this.ShowInTaskbar = false ;
//窗體運行後,最大化,充滿整個屏幕
(2).使得字符在屏幕上不斷移動:
實現字符在屏幕上像字符屏保同樣不斷移動,是經過一個定時器來完成的。不斷移動的字符,其實就是一個Label組件。當設定好Label組件要顯示的字符後,
也就設定了在屏幕上要移動的字符。定時器每隔一段時間,都把Label組件的橫座標減去一個定值,這樣在定時器的驅動下,Label組件的位置就變換了,帶來的視
覺效果,就是字符不斷移動。http://www.cnblogs.com/roucheng/p/3515583.html
當Label組件的位置已經移動到屏幕的外面之後,這是就有把Label組件的橫座標回覆到起始值(即:屏幕的最右邊),而後判斷Label組件的縱座標是否位於屏
幕的頂部,若是在頂部,則把縱座標的位置重置在中部;若是在中部,則重置在底部;若是在底部,則重置在頂部。通過了這些判斷,字符不只能夠實現從右往左
移動,還能夠變換字符進入屏幕的位置。從而也豐富了屏幕保護的內容。其實要實現這些判斷,首先還必須知道屏幕的工做區域,由於只有先知道屏幕的工做區域
,在可以實現對Label組件的橫座標和縱座標的設定工做。下面就是實現此步驟地具體代碼:
//獲得計算機屏幕的工做區域
Rectangle ssWorkArea = Screen.GetWorkingArea ( this ) ;
lblMarquee.Location = new Point ( ssWorkArea.Width - iDistance ,
lblMarquee.Location.Y ) ;
//顯示標籤
lblMarquee.Visible = true ;
// 增長2個象素點,你能夠經過修改speed的值來改變標籤的移動速度
iDistance += speed ;
// 若是標籤已經走出屏幕,則把標籤的位置重定位到屏幕的右邊
if ( lblMarquee.Location.X <= -( lblMarquee.Width ) )
{
//Reset the distance to 0.
iDistance = 0 ;
//判斷標籤的位置是否在頂部,若是在,則重定位到中部
if ( lblMarquee.Location.Y == 0)
lblMarquee.Location = new Point ( lblMarquee.Location.X , ( ssWorkArea.Height / 2 ) ) ;
//判斷標籤的位置是否在中部,若是在,則重定位到底部
else if ( lblMarquee.Location.Y == ssWorkArea.Height / 2 )
lblMarquee.Location = new Point ( lblMarquee.Location.X , ssWorkArea.Height - lblMarquee.Height ) ;
//重定位到頂部
else
lblMarquee.Location = new Point ( lblMarquee.Location.X , 0 ) ;
}
(3).檢測鍵盤、鼠標狀態,肯定退出屏幕保護程序:
在屏幕保護運行的時候,當鍵盤被按動,或者鼠標移動,屏幕保護都會關閉。在實際的程序設計中,檢測鍵盤是否被按動,經過"KeyDown"事件就能夠判斷。在
程序中,判斷鼠標是否移動的思路是經過二個全局變量記錄下,程序剛剛運行的時候的鼠標的位置(即:X和Y),當鼠標移動的時候,判斷移動後的位置和記錄的
位置是否有出入,若是有出入,就關閉屏保。下面代碼功能就是檢測鼠標移動,並結束屏幕保護,具體以下:
// 把鼠標剛剛開始移動的位置給記錄下來
if ( ixStart == 0 && iyStart == 0 )
{
ixStart = e.X ;
iyStart = e.Y ;
return ;
}
//判斷自屏幕保護程序運行後,鼠標的位置是否變更
else if ( e.X != ixStart || e.Y != iyStart )
{
Cursor .Show ( ) ;
timerSaver.Enabled = false ;
Application .Exit ( ) ;
};
其中"ixStar"和"iyStart"就是記錄程序運行的時候,鼠標的起始位置。
(4).對Windows對屏幕保護設定參數的響應:
當屏幕保護加入到Windows系統後,你就能夠經過Windows系統來設定屏幕保護的屬性了,因爲咱們製做的這個屏幕保護,沒有可供設置的選項,但也要對
Windows的"設置"按鈕進行響應。而要完成這種響應,所用的知識就是在Windows系統中按動"設置"按鈕,對屏幕保護進行設定時,其實也就對屏保程序傳遞"/c"字
符。而要設定口令,則會傳遞"/a"字符,據此,能夠獲得代碼:
if (args [ 0 ].Substring ( 0 , 2 ).Equals ( "/c" ) )
{
MessageBox.Show("此屏幕保護沒有可供設置的選項!","用C#製造屏幕保護" ,
MessageBoxButtons.OK ,MessageBoxIcon.Information ) ;
Application.Exit ( ) ;
}
else if ( args [ 0 ] == "/a" )
{
MessageBox.Show("此屏幕保護沒有可供設定口令的選項!","用C#製造屏幕保護" ,
MessageBoxButtons.OK ,MessageBoxIcon.Information ) ;
Application.Exit ( ) ;
}
三.總結:
因爲屏幕保護都是Windows程序,因此編譯的時候,要產生Windows程序,編譯的命令以下:
csc /t:winexe screen.cs
在正確編譯"Screen.cs"後,能夠獲得"Screen.exe"文件,把"Screen.exe"更名爲"Screen.scr",並拷貝到Windows的"System32"目錄中去。至此這個字符屏保
就完成了從編寫到配置的所有工做了。