屏保程序模板化完整源代码——电脑屏幕保护的漏洞

熟悉Windows操作系统的朋友一定对Windows的屏保程序不陌生,喜欢VB编程的朋友也一定想编写一个自己的Windows屏保程序。其实屏保程序实质上仍然是一个Windows的可执行程序,理论上说你可把自己的任何一个现成的程序作品改造成屏保程序,当你看完下面的讲解后便可以轻易地编写或是改造一个标准的Windows屏保程序了!


  一个标准的Windows屏保程序应该具备如下特点:


  1、扩展名必须是。scr,程序放置在Windows或者是System目录下。


  2、常规的屏保程序由运行主窗体、设置窗体和更改密码窗体三个窗体组件构成,屏保程序在运行前必须中止它的前一个可能在运行中的程序副本。


  3、屏保主程序运行于全屏幕状态,主窗体无标题栏,背景一般为黑色。


  4、屏保程序运行时隐藏鼠标指针,程序退出(或处理用户输入密码)时显示鼠标。


  5、屏保程序运行时应该禁止使用特殊功能键如重启键、Windows菜单键等,程序退出时恢复这些功能键。


  6、屏保主程序运行时主窗体及它的所有可视控件接受键盘事件KeyDown、鼠标事件MouseDown、MouseDown时能自动终止程序运行(如果设置了密码保护应该触发对应的密码处理模块并响应用户的交互)。


  7、屏保程序有四种运行方式,就是:①运行在预览框中(用于预览屏保的效果——在“显示属性”→“屏幕保护程序”→“小屏幕”);②运行设置程序(用于设置一些相关的样式——在“显示属性”→“屏幕保护程序”→“设置”);运行密码更改程序(用于设置和修改屏保密码——在“显示属性”→“屏幕保护程序”→“密码保护”→“更改”);真正的运行屏保(屏保运行时的效果—在“显示属性”→“屏幕保护程序”→“预览”或鼠标、键盘在指定的时间内无动作时)。


  8、屏保程序在启动以及处理设置、更改密码时还应该有对相关数据的存取功能(数据文件操作或注册表操作)。


  正因为屏保程序具有的以上特殊性,设计制作一个标准的屏保程序要比制作一个普通的应用程序要考虑的事情多。我们可以把一个标准的屏保程序分成两大部分:决定程序运行效果的部分(以下简称“核心”代码,可以看成是一个标准的普通应用程序);区别于普通应用程序的特别处理部分(即屏保外壳,处理上述8点内容)。这里介绍的《屏保程序模板化完整源代码》提供给朋友们一个制作标准屏保外壳的程序源代码。此源代码标准模板化设计(以下简称“模板”),它本身就是一个“黑屏幕”的标准屏保程序。使用此“模板”,理论上可以把你的任何应用程序改造成屏保程序,你只需要在“模板”提示的地方选择添加上你的“核心”代码就可以了,快速、方便!


  把一个现成的应用程序改造成屏保程序时需要把原程序窗体控件添加到相应的“模板”窗体中,将源代码分解后添加到“模板”代码中。但原程序中的有些代码在屏保程序中是无用的、或是不合理的(如上述三个窗体间切换部分就应该去掉,如果你是重新设计一个屏保程序,窗体间的切换工作也不必去作)。另外,如果你想让“预览”的小窗口中能有正常运行一样的效果,主窗体的“核心”代码在设计时就要有根据屏幕大小的变化自动调整程序运行效果的响应。如果只是能够简单的预览,这部分工作也可以省去。


  作为示例本站还同时提供一个《时钟》程序的完全源代码供你亲自动手把它改造成屏保程序练习用,《时钟》源代码中加入了详细的改造说明,仔细分析这一实例代码相信对你制作屏保程序一定有不小的帮助。需要《时钟》程序的朋友可以从本站下载。


  本套“模板”由三个窗体和一个通用模块共四部分组成。下面重点介绍“模板”的源代码及添加“核心”代码的方法。


  通用模块Module1


  这部分代码包含屏保程序的总入口Sub Main()。如前所述,屏保程序可以以四种不同的运行方式启动,无论程序以何种方式启动,新的启动程序必须先行检测是否有前一个副本的程序模块在运行,如果有就中止它的运行,然后重新启动新的屏保程序模块。


  屏保程序的运行状态由用户选择决定。当屏保以不同方式启动时Windows会赋予它不同的命令行参数,四种运行状态的命令行参数依次为/p、/c、/a和/s,获得此命令行参数后屏保程序就会决定激活哪一个程序模块。


  模块Module1的前面的几个API函数和子过程就是完成以上任务的,这也是该模块的主要功能之一。


  模块中还包含一个供主窗体和设置窗体调用的公有子程序(zhuce,这一部分用黑体标出),作用为:


  1、主窗体运行状态(显示属性的小屏幕预览或屏保正常运行):取得命令行参数(/p或/s),调用zhuce,从模块中取得保存于注册表中的有关项目值的数据,在主窗体中初始化屏保“核心”程序相关变量。


  2、设置窗体运行状态:取得命令行参数(/c),调用zhuce,从模块中取得保存于注册表中的有关项目值的数据,在设置窗体中初始化屏保设置窗体“核心”程序相关变量。


  模块Module1中用黑体显示的部分就是完成以上任务的,这是该模块的主要功能之二。


  此外,模块还完成包含“侦测当前屏保的运行方式”和“‘卸载窗体结束程序”两个子程序供其它窗体代码调用。


  重点说明:


  “模板”的全部代码中只有屏保程序在注册表中的保存位置可以由用户选择修改(当然不修改直接使用默认也可),其它代码无需修改可直接用于你的屏保制作。“模板”操作注册表完成屏保设置参数的存取在注册表中的主键位置是:


  HKEY_LOCAL_MACHINE\Software\Microsoft\zimu


  其中的zimu就是默认的主键名,你不喜欢可以更改,但必须同时修改“设置”窗体和“更改”密码窗体中相应的注册表保存部分代码内容,建议在没“读懂”屏保代码之前不要修改,以防程序运行出错。该主键下的注册表项依次为canshu0-canshu10(“模板”为你准备了10个子项,相信足够你用的了,其中的canshu0专门用于记录屏保密码请勿变动);模块取出的变量数据存放在全局数组变量tmpVal(0-10)中(这11个变量都是字符串型的,可以被其它窗体代码调用)。另外,用此“模板”按下面介绍的方法制作屏保程序时建立的模块、窗体(包括窗体上的控件)名请勿更改,如果非要更改勿请在程序制作完成后用“搜索/替换”方法将原名在所有窗体及模块代码中替换为新名字,否则程序运行时会找不到对像。


  下面具体介绍制作方法。


  在VB开发环境下新建一个工程,VB会自动建立一个主窗体Form1。保存工程:按默认窗体文件名“Form1.frm”保存窗体文件;将工程文件名“工程1.vbp”修改为“pingbaomoban.vbp”(或你的需要名)保存工程文件。


  在VB的“工程资源管理器”窗口中操作添加一个模块Module1,将下面的代码全部复制下来粘帖到模块代码窗口中。在“工程”菜单中选择“工程属性”→“通用”,将“启动对象”修改为“Sub Main”;选择“生成”项,将应用程序“标题”修改为“屏保模板化完全代码”(或你的需要名),在“命令行参数”中输入“/s”,按默认文件名Module1.bas保存模块文件。


    ’模块Module1.bas——制作你的屏保程序时无需修改可直接使用,如果屏保程序还需要其它全局性的常量、变量、API函数声明或需要其它的模块,其内容既可插入在本模块中,也可单独建立另外一个新的模块文件


    Option Explicit


    Declare Function GetClassName Lib “user32” Alias “GetClassNameA” (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long


    Declare Function FindWindow Lib “user32” Alias “FindWindowA” (ByVal lpClassName As String, ByVal lpWindowName As String) As Long


    Declare Function SendMessage Lib “user32” Alias “SendMessageA” (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long


    Declare Function GetClientRect Lib “user32” (ByVal hwnd As Long, lpRect As RECT) As Long


   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值