用C#制作字幕显示屏幕保护

2016-02-19 16:57 38 1 收藏

下面图老师小编跟大家分享一个简单易学的用C#制作字幕显示屏幕保护教程,get新技能是需要行动的,喜欢的朋友赶紧收藏起来学习下吧!

【 tulaoshi.com - 编程语言 】

  本文介绍使用C#制作屏幕保护的方法,这个屏幕保护就是仿效视窗系统自带的字幕屏保。

  屏幕保护程序的扩展名虽然是"scr",但其实是一个可执行的"exe"文件。但他又是一个比较独特的"exe"文件。下面就来探讨一下,用C#是如何编写屏幕保护的整个过程。

  一.本文中介绍的程序设计及运行环境

  (1).微软视窗2000 服务器版

  (2)..Net Framework SDK 正式版

  二.C#编写字幕显示屏保程序的关键步骤以及解决方法:

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  (1).设定程序的窗体符合屏幕保护的要求:

  由于屏幕保护程序就是一个可执行程序,所以在编写屏幕保护程序的时候,首先按照可执行程序来设计。但屏幕保护有自身的特点。譬如:屏幕保护都是充满整个屏幕的,并且没有无边。屏幕保护运行的时候,不能显示任务栏。在程序设计中实现这些特点,关键就在于对窗体的某些属性的设定上。下面是对窗体属性的设定,就可以满足屏幕保护的要求,具体如下:

  

this.Name = "ScreenSaver" ;//窗体运行后无边界this.FormBorderStyle = FormBorderStyle.None ;//程序运行后不显示在任务栏上this.ShowInTaskbar = false ;//窗体运行后,最大化,充满整个屏幕

  (2).使得字符在屏幕上不断移动:

  实现字符在屏幕上像字符屏保一样不断移动,是通过一个定时器来完成的。不断移动的字符,其实就是一个Label组件。当设定好Label组件要显示的字符后,也就设定了在屏幕上要移动的字符。定时器每隔一段时间,都把Label组件的横坐标减去一个定值,这样在定时器的驱动下,Label组件的位置就变换了,带来的视觉效果,就是字符不断移动。

  当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 ) ;//重定位到顶部elselblMarquee.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"目录中去。至此这个字符屏保就完成了从编写到配置的全部工作了。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

本文示例代码或素材下载

来源:https://www.tulaoshi.com/n/20160219/1613666.html

延伸阅读
win7系统如何切换显示屏幕方向?   这里为大家带来的是Win7系统切换(更改)显示屏幕方向的方法,大家都知道手机有自动翻转屏幕的功能,不管在床上侧躺着都可以方便的观看电影,那么如果躺在床上用电脑看电影的话可以更改显示屏幕方向是不是更方便呢?win7系统里面就有自带这个旋转功能哦,想必很多朋友都不知道吧,那么该如何操作呢?现...
一、弄清结构再动手 要想轻松的抽取RSS信息,自然先要了解它的结构,所谓“知己知彼,百战不殆”嘛。 1、RSS的结构 我们先打开百度新闻一个RSS链接,如果你再多打开几个别的网站的RSS链接,会发现他们都有大致相同的结构。而我们在揭秘RSS(上)中为大家讲解的其实就是编成实现这样的一个XML文件。 为了能够方便地对这样...
你是否已厌倦机上的屏幕保护程序,而又苦于难找到令自己满意的。不急,“自己动手,丰衣足食”,你自己就可以制作精美的屏幕保护程序,只要你稍有VB编程知识。下面我们就用VB来编写一个介绍自己家人的屏幕保护程序。 1、获取屏保图片: 从你家人的相片中,挑出你选定要作为图片的,用扫描仪扫进你的电脑中,保存为“*.bmp”格式。如果...
电脑朗读(英文)一个很好的触发点,通过它可以实现电子小说阅读、英文听力测试、英文单词学习... 下面的Speech已对MSTTS作了简单封装。 1.安装好MSTTS(如果你有装金山词霸,系统就已经安装了),可以在winnt\speech中打到vtxtauto.tlb文件; 2.用.Net SDK自带的tlbimp工具把vtxtauto.tlb转换成.dll格式: tlbimp vtxta...
using System;  using System.DirectoryServices;  using System.Collections;  using System.Text.RegularExpressions;  using System.Text;  /**   * @author 吴海燕   * @email  wuhy80-usual@yahoo.com   * 2004-...

经验教程

88

收藏

48
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部