欢迎来到天天文库
浏览记录
ID:36013352
大小:31.50 KB
页数:7页
时间:2019-04-29
《实现真正的windows屏幕保护程序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实现真正的Windows屏幕保护程序屏幕保护程序是一种特殊的应用程序,如果用户打开了Windows的屏幕保护功能,而且在一特定的时间段内没有任何输入,系统就回自动启动屏幕保护程序。屏幕保护程序有两个作用:1.防止屏幕长时间显示静态图象而降低荧光介质的寿命。2.防止用户离开计算机时屏幕上的信息被不相干的人看到。相应的,屏幕保护程序至少应该实现以下两个功能:1.动画功能:显示动态的图象。2.密码校验功能:退出程序时屏蔽一切系统热键(Ctrl+Alt+Del,Alt+Tab,Ctrl+Esc等,避免用户使用热键关闭程序或切换到其它程序而跳过密码校验),并要求
2、输入授权密码。我们可以找到不少介绍Windows屏幕保护程序的资料,也可以找到许多制作屏幕保护程序的工具。然而,由于不清楚Windows屏幕保护程序的密码校验功能,所以它们实现的往往只是动画功能,而没有提供密码校验功能。实际上,VisualC++已经为我们准备好了一个屏幕保护库,使用它,我们可以非常容易的实现Windows屏幕保护程序的一切功能。介绍Windows屏幕保护库Windows屏幕保护库为我们提供了1.WinMain()函数:完成程序初始化和消息调度。看到这里,可能有些读者已经想到了:我们不能在MFC中使用Windows屏幕保护库。为什么呢?
3、原因很简单:MFC的底层封装了WinMain()函数,如果在MFC中使用Windows屏幕保护库,一个程序中就会有两个WinMain()函数,显然说不过去。因此,我们只有使用Win32SDK了。2.DefScreenSaverProc()函数:处理键盘、鼠标等消息,实现屏蔽热键及密码校验等功能。3.一些函数、变量和常量的定义。大家可以在VisualC++安装目录的Include子目录中找到SCRNSAVE.H文件,通过它,我们可以看到它们具体的定义。当系统启动一个屏幕保护程序时,WinMain()函数首先判断系统传递的命令行参数。如果参数指示设置屏幕保
4、护程序,那么WinMain()函数将会用函数BOOLWINAPIScreenSaverConfigureDialog(HWNDhDlg,UINTmessage,WPARAMwParam,LPARAMlParam);来创建设置对话框并将用户的输入保存到注册表中,还会用函数BOOLWINAPIRegisterDialogClasses(HANDLEhInst)来注册设置对话框中的特殊窗口类或自定义控件类,如果没有特殊窗口类和自定义控件类,RegisterDialogClasses()函数只需简单的返回TRUE值。如果参数指示运行屏幕保护程序,WinMain
5、()函数会调用一些初始化代码来注册窗口类并建立一个全屏窗口。而发送给屏幕保护程序的消息则由函数LRESULTWINAPIScreenSaverProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam);处理。我们可以在ScreenSaverProc()函数中处理下面几个消息(当然也可以处理其它消息):WM_CREATE从注册表中获取屏幕保护程序的设置信息创建一个计时器处理其它的初始化工作WM_TIMER处理绘制工作WM_DESTORY销毁计时器处理其它销毁工作ScreenSaverProc()函数未处理的消
6、息则传递给DefScreenSaverProc()处理。从这里我们可以看出,我们所要做的只是实现ScreenSaverProc(),ScreenSaverConfigureDialog()和RegisterDialogClasses()三个函数,而麻烦的密码校验和密码更改已经由DefScreenSaverProc()函数实现了!剩下的就是编译并与Windows屏幕保护程序库连接了。必须注意的是,Windows屏幕保护程序库对资源ID有一些特殊的要求。首先,它要求有一个ID为IDS_DESCRIPTION(定义为#defineIDS_DESCRIPTIO
7、N1,见VisualC++目录的IncludeSCRNSAVE.H文件),长度小于25的字符串资源,这个字符串将显示在桌面属性对话框屏幕保护程序列表框中。另一个要求是屏幕保护程序的设置对话框的ID必须为DLG_SCRNSAVECONFIGURE(定义为#defineDLG_SCRNSAVECONFIGURE2003)。下面我们来看一个屏幕保护程序框架的源程序:(笔者的开发环境为Windows98和VisualC++6.0,由于笔者没有WindowsNT,故未考虑WindowsNT下的情况。)屏幕保护程序框架的源程序//////////////////
8、/////主程序///////////////////////#include"windows
此文档下载收益归作者所有