C#制作簡(jiǎn)易的屏保
前言:前段時(shí)間,有個(gè)網(wǎng)友問(wèn)我C#制作屏保的問(wèn)題,我瞬間懵逼了(C#還可以制作屏保!)。于是我去查閱相關(guān)資料,下面把C#如何制作屏保的過(guò)程及我學(xué)習(xí)過(guò)程的心得也記錄下來(lái),希望對(duì)需要的人能有幫助。
基本思路:
1)屏保運(yùn)行起來(lái)是一個(gè)整個(gè)屏幕且無(wú)邊框的窗體,不能顯示任務(wù)欄,鼠標(biāo)點(diǎn)擊就會(huì)退出。當(dāng)然你還可以在界面上自定義一些東西,如顯示系統(tǒng)時(shí)間,屏保里面顯示Rss內(nèi)容等。
2)屏幕保護(hù)程序的擴(kuò)展名雖然是".scr",但本質(zhì)是一個(gè)可執(zhí)行的".exe"文件。
具體步驟:
打開Visual Studio 2012,建立一個(gè)windows項(xiàng)目,取名為MyScreenSaver,并添加一個(gè)windows 窗體,取名為FrmMyScr。
設(shè)置FrmMyScr的AutoScaleMode屬性為Font,BackColor屬性為White,F(xiàn)oreColor屬性為ControlText,F(xiàn)ormBoderStyle屬性為None,ShowInTaskbar屬性為False,WindowState屬性為Maximized。
重點(diǎn):接下來(lái)給FrmMyScr添加背景圖片。設(shè)置FrmMyScr的BackGroundImage屬性值如桌面上的bgrdImg.jpg,此時(shí)在項(xiàng)目的根目錄下會(huì)自動(dòng)新建Resources文件夾,單擊里面的bgrdImg.jpg,將其文件屬性中“生成操作”的值改為“嵌入的資源”。設(shè)置BackGroundImageLayout屬性為Stretch。
在FrmMyScr中添加一個(gè)Label,用于顯示系統(tǒng)時(shí)間,取名lblTimeNow,BackColor屬性為Transparent,F(xiàn)oreColor屬性為White。窗體界面如下:

接下來(lái),為窗體編寫相關(guān)事件代碼:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Reflection;
using System.IO;
namespace MyScreenSaver
{
public partial class FrmMyScr : Form
{
public FrmMyScr()
{
InitializeComponent();
this.DoubleBuffered = true;//設(shè)置本窗體
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.DoubleBuffer, true);
}
Timer NowTime = new Timer();
private void FrmMyScr_Load(object sender, EventArgs e)
{
Assembly asm = this.GetType().Assembly;
Stream stream = asm.GetManifestResourceStream("MyScreenSaver.Resources.BgrdImg.jpg");
this.BackgroundImage = new Bitmap(stream);
this.Click += new System.EventHandler(Exit);
this.BackColor = System.Drawing.Color.White;
this.lblTimeNow.Location = new System.Drawing.Point((this.Size.Width / 10), this.Size.Height / 5 * 4);
NowTime.Interval = 10;
this.NowTime.Tick += new System.EventHandler(LableTimeText);
NowTime.Start();
}
private void Exit(object sender, EventArgs e)
{
Application.Exit();
}
private void LableTimeText(object sender, EventArgs e)
{
lblTimeNow.Text = DateTime.Now.ToString();
}
private void FrmMyScr_Deactivate(object sender, EventArgs e)
{
Application.Exit();
}
}
}
到此為止,把程序執(zhí)行一下就可以看到預(yù)期的效果了。當(dāng)然你還想給.exe設(shè)置個(gè)圖標(biāo),可用圖標(biāo)制作工具制作一個(gè)ico圖標(biāo)如favicon.ico并添加到項(xiàng)目根目錄,在項(xiàng)目右鍵屬性的“應(yīng)用程序”選項(xiàng)卡下的“圖標(biāo)和清單”欄,圖標(biāo)下拉選擇favicon.ico,保存后把程序執(zhí)行一下即可。
最后把bin/debug或者bin/release下的可執(zhí)行程序后綴改成scr,并拷貝到系統(tǒng)盤Windows的system32下。
這樣通過(guò)桌面?zhèn)€性化的屏幕保護(hù)程序設(shè)置一下就可以投入使用了,是不是很炫呢!趕緊試試吧!
總結(jié):
1)我采用將背景圖片作為“嵌入的資源”的方式,將內(nèi)嵌資源編譯進(jìn)exe文件里面,故無(wú)需將背景圖片一同拷貝進(jìn)去;否則還需將背景圖片一同拷貝進(jìn)去。
2)這個(gè)項(xiàng)目是用VS2012創(chuàng)建的,默認(rèn)的目標(biāo)框架為.NET Framework 4.5,這樣運(yùn)行生成的可執(zhí)行文件MyScreenSaver.exe及MyScreenSaver.scr文件在外部均能夠正常運(yùn)行;但拷貝到C:\Windows\System32下,運(yùn)行就報(bào)錯(cuò):"This application could not be started. Do you want to view information about this issue?"
我試著將目標(biāo)框架修改為.NET Framework 4,重新運(yùn)行后,MyScreenSaver.exe及MyScreenSaver.scr文件在外部均能夠正常運(yùn)行,拷貝到C:\Windows\System32下運(yùn)行也沒(méi)有問(wèn)題了。另外我發(fā)現(xiàn)目標(biāo)框架為.NET Framework 2.0時(shí)也沒(méi)有問(wèn)題。真是奇怪!具體原因,筆者暫時(shí)不明所以。系統(tǒng)為Windows 7 旗艦版 SP1。
源代碼:http://xiazai.jb51.net/201701/yuanma/MyScreenSaver(jb51.net).rar
參考文章:http://www.dhdzp.com/article/101845.htm
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#最簡(jiǎn)單的關(guān)閉子窗體更新父窗體的實(shí)現(xiàn)方法
原理就是將子窗體最為對(duì)話框模式彈出,當(dāng)窗體關(guān)閉或取消時(shí)更新主窗體2012-11-11
C#在foreach遍歷刪除集合中元素的三種實(shí)現(xiàn)方法
這篇文章主要給大家總結(jié)介紹了關(guān)于C#在foreach遍歷刪除集合中元素的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
C#運(yùn)行程序時(shí)阻止關(guān)閉顯示器和系統(tǒng)待機(jī)
這篇文章介紹了C#運(yùn)行程序時(shí)阻止關(guān)閉顯示器和系統(tǒng)待機(jī)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
c#遠(yuǎn)程html數(shù)據(jù)抓取實(shí)例分享
這篇文章主要介紹了c#遠(yuǎn)程html數(shù)據(jù)抓取的方法,大家參考使用吧2013-12-12
結(jié)合Visual C#開發(fā)環(huán)境講解C#中事件的訂閱和取消訂閱
這篇文章主要介紹了C#中事件的訂閱和取消訂閱,結(jié)合Visual C#開發(fā)環(huán)境來(lái)進(jìn)行講解,Visual C#被集成在微軟的IDE程序Visual Studio中,需要的朋友可以參考下2016-01-01
C#中Parallel類For、ForEach和Invoke使用介紹
這篇文章介紹了C#中Parallel類For、ForEach和Invoke的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04
c# Winform同一數(shù)據(jù)源多個(gè)控件保持同步
通過(guò)對(duì)控件屬性設(shè)置數(shù)據(jù)源綁定,利用Windows數(shù)據(jù)更改通知這一特性,只要訂閱(設(shè)定綁定)的控件都能接收到數(shù)據(jù)的變化通知。 通過(guò)DataBindings方法實(shí)現(xiàn)雙向數(shù)據(jù)綁定2021-06-06

