c#制作屏幕保护程序步骤(字幕屏保)

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

二.C#编写字幕显示屏保程序的关键步骤以及解决方法:
(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 ) ;
//重定位到顶部
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"目录中去。至此这个字符屏保
就完成了从编写到配置的全部工作了。

(0)

相关推荐

  • android禁止锁屏保持常亮(示例代码)

    在播放video的时候在mediaplayer mMediaPlayer.setScreenOnWhilePlaying(true); 已经设置了,在原生的android没有问题和在defy上也没有问题,一到三星的galaxy上就有问题,不知道三星他们改了哪些地方.一般的话设置了播放视频屏幕没有自动.但是在三星上就出了问题. 只好再找找.一般的话设置有两种方法. 如下: 复制代码 代码如下: 1. getWindow().addFlags(WindowManager.LayoutParams.F

  • js 模拟气泡屏保效果代码

    核心代码: 复制代码 代码如下: var T$ = function(id) { return document.getElementById(id); }var $extend = function(des, src) { for (var p in src) { des[p] = src[p]} return des; }var Bubble = function() {    // 小球随机样式    var clss = ['ball_one', 'ball_two',  'ball_t

  • delphi程序全屏显示无标题栏覆盖整个屏幕(适合屏保)

    delphi 程序全屏显示无标题栏,覆盖整个屏幕,这个在做工控机或屏保时有用的,所以记下 复制代码 代码如下: procedure TMainFrm.FormCreate(Sender: TObject); begin with MainFrm do begin { Position form } Top := 0 ; Left := 0 ; { Go full screen} BorderStyle := bsNone ; WindowState := wsmaximized; ClientW

  • serv-u与屏保导致serv-u服务器经常停止无法连接的解决方法

    公司win2003服务器发现serv-u一直以来都有经常暂停无法连接的问题只有重新启动serv-u才能解决serv-u停止问题,还以为是版本或者流量的关系-- 查来查去终于发现是开启了"屏保"-- 把屏保程序关闭了,解决问题 如果关闭了屏保可以参考下面的方法解决: 最近使用Serv-U来架设FTP服务器,用于文件传输的桥梁.好景不长,每隔一段时间,Serv-U的服务就会自动停止.因为这个ftp服务很重要,要保证每天都能正常工作,如果只靠人每天来查看服务是否正常,牵涉精力不说,又不是十分

  • Android截屏保存png图片的实例代码

    复制代码 代码如下: import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException; import android.app.Activity;import android.graphics.Bitmap;import android.graphics.Rect;import android.util.Log;import android.view.View; publ

  • C#制作简易的屏保

    前言:前段时间,有个网友问我C#制作屏保的问题,我瞬间懵逼了(C#还可以制作屏保!).于是我去查阅相关资料,下面把C#如何制作屏保的过程及我学习过程的心得也记录下来,希望对需要的人能有帮助. 基本思路: 1)屏保运行起来是一个整个屏幕且无边框的窗体,不能显示任务栏,鼠标点击就会退出.当然你还可以在界面上自定义一些东西,如显示系统时间,屏保里面显示Rss内容等. 2)屏幕保护程序的扩展名虽然是".scr",但本质是一个可执行的".exe"文件. 具体步骤: 打开Vis

  • 修改屏保文件法

    修改屏保文件法 原理:Windows 2000/XP启动时,如果不进系统,会自动启动屏保,如果用CMD.EXE或EXPLORER.EXE代替logon.scr,启动启动时实际启动的是CMD命令. 步骤 拷贝系统安装目录system32\logon.scr文件备份(需要DOS,必要时需NTFS4DOS,或Windows PE/ Bart's PE启动后进行): 改cmd.exe或explorer.exe名为logon.scr文件,替换掉需要破解的系统的system32目录下logon.scr: 启

  • Win 2003系统也玩图片收藏屏保

    Windows Me/XP的屏幕保护程序可以将"我的文档"里收藏的图片做成屏保.但是在Windows其它版本的操作系统中却没有该功能.想将这个功能移植到Windows 2003中去吗?照着下面的步骤做就OK了. 第一步:在Windows Me的"X:\Windows\system"文件夹中,找到"IMAGING.DLL"文件和"图片收藏屏幕保护程序.scr"文件,然后拷贝到闪存上备用(其中X是Windows Me系统所在分区的

  • c#制作屏幕保护程序步骤(字幕屏保)

    屏幕保护程序的扩展名虽然是"scr",但其实是一个可执行的"exe"文件.但他又是一个比较独特的"exe"文件.下面就来探讨一下,用C#是如何编写屏幕保护的整个过程. 二.C#编写字幕显示屏保程序的关键步骤以及解决方法:(1)设定程序的窗体符合屏幕保护的要求:由于屏幕保护程序就是一个可执行程序,所以在编写屏幕保护程序的时候,首先按照可执行程序来设计.但屏幕保护有自身的特点.譬如:屏幕保护都是充满整个屏幕的,并且没有无边.屏幕保护运行的时候,不能显

  • 用vbs记录屏幕保护程序的开始时间和结束时间

    问: 您好,脚本专家!如何记录屏幕保护程序的开始时间和结束时间? -- JS 答: 您好,JS.您知道,一位脚本专家(嘿,谁说"肯定是 Greg"?)年纪大得记得屏幕保护程序刚出现的日子.那时,这类脚本毫无意义.毕竟,屏幕保护程序启动后,每个人都神魂颠倒,从未想过让它结束.事实上,作为计算机支持人员的这位脚本专家首先必须做的一件事就是在每个人的桌面上创建快捷方式,使他们能够随时启动"飞转的小烤炉". 那时人们很容易得到快乐. 啊,但是活在过去没有意义,对吧?在今天的

  • 用vbs实现配置无人登录计算机时使用的屏幕保护程序

    问: 您好,脚本专家!我最近下载了你们的"脚本中心"屏幕保护程序,当有人登录计算机时,它运行起来棒极了.但是无人登录时,计算机却使用其它屏幕保护程序.如何让计算机在无人登录时也使用"脚本中心"屏幕保护程序? -- RF 答: 您好,RF.您知道,我们遇到过这种情况,您可能在设法欺骗这些老脚本专家们.举个例子来说,我们怎么知道您希望无人登录计算机时运行的屏幕保护程序就是我们的屏幕保护程序?也许您只是奉承脚本专家,好让脚本专家回答您的问题.回答完问题后,您就会把我们甩掉

  • 巧妙卸载公用电脑的屏幕保护程序

    学校的微机室是多个班级共用,一个班级的学生上课时指定了屏幕保护程序并设定了口令,下一个班级的学生上课时,如果在指定的时间内(最短时间为1分钟)没有使用计算机,即运行屏幕保护程序.由于这个班的学生不知道口令,所以只好按下Reset键重启计算机.此时计算机的硬盘正高速旋转,按Reset键重启计算机时会划伤存有大量数据的硬盘.长此一往,就会使硬盘夭折,不仅会丢失大量教学数据,而且还会增加学校的经济负担.因此,在学校多班并用的微机室,卸载计算机的屏幕保护程序已成为大多数教师的迫切要求.下面,笔者把自己卸

  • 卸载掉您计算机中的屏幕保护程序

    学校的微机室是多个班级共用,一个班级的学生上课时指定了屏幕保护程序并设定了口令,下一个班级的学生上课时,如果在指定的时间内(最短时间为1分钟)没有使用计算机,即运行屏幕保护程序.由于这个班的学生不知道口令,所以只好按下Reset键重启计算机.此时计算机的硬盘正高速旋转,按Reset键重启计算机时会划伤存有大量数据的硬盘.长此一往,就会使硬盘夭折,不仅会丢失大量教学数据,而且还会增加学校的经济负担.因此,在学校多班并用的微机室,卸载计算机的屏幕保护程序已成为大多数教师的迫切要求.下面,笔者把自己卸

  • C#实现打造气泡屏幕保护效果

    本文主要是介绍C#实现打造气泡屏幕保护效果,首先说一下制作要点:1 窗口要全屏置顶 2 模拟气泡的滚动和粘滞效果 3 支持快捷键ESC退出 大致就是这3个要点了,其他还有一些细节我们在程序中根据需要再看,OK,开工! 首先是全屏置顶,因为是屏幕保护嘛,这个简单,在窗体的属性设置里把FormBorderStyle设置为none表示无边框,把ShowInTaskbar设置为false表示不在任务栏出现,最后一个把WindowState设置为Maximized表示最大化即可,当然可以设置TopMost

  • 利用WPF实现Windows屏保的制作

    目录 介绍 正文 实现代码 介绍 框架使用.NET452: Visual Studio 2019; 项目使用 MIT 开源许可协议: 更多效果可以通过GitHub[1]|码云[2]下载代码; 也可以自行添加天气信息等. 正文 屏保程序的本质上就是一个Win32 窗口应用程序: 把编译好一个窗口应用程序之后,把扩展名更改为 scr,于是你的屏幕保护程序就做好了; 选中修改好的 scr 程序上点击右键,可以看到一个 安装 选项,点击之后就安装了; 安装之后会立即看到我们的屏幕保护程序已经运行起来了;

  • 利用Python制作自已的动态屏保

    我的环境 win10 python3.X pycharm 1.编写自己的屏保程序 注意:屏保程序打开就是全屏,可自动循环播放 我的样子如图 1.代码准备 Gitee下载 import os # 必须在加载 加之前 os.environ['SDL_VIDEO_WINDOW_POS'] = "%d, %d" % (0, 30) import random import pygame from pygame.locals import * from math import pi, sin,

  • 利用注册表防止学生修改屏幕保护密码

    作为电脑教师,最烦的就是学生随手修改了屏幕保护的密码.有没有好办法去防止学生修改屏保密码呢?我们可利用注册表做到这一点. 1.隐藏控制面板中的"显示"设置 在"开始→运行"中键入"regedit",确定后打开注册表编辑器.定位到HKEY_CURR ENT_USER\Software\Mic-rosoft\Windows\CurrentVersion\Policies\System,新建名为"NoDispcpl"的子键,设其值为

随机推荐