Win32屏幕保护程序

一、简介

  • 屏幕保护程序(Screen Saver)的历史几乎与视窗操作系统的历史一样悠久,设计它的目的是为了保护CRT显示器使其的使用寿命更长。但随着技术的进步,新型的CRT显示器及液晶显示器已经无须这样做了,不过屏幕保护程序并未消失,因为其绚丽的画面成了人们彰显个性的方式
  • 屏幕保护程序虽然变化多端,但对开发者而言,它仍然是一种Windows应用程序,屏幕保护程序的扩展文件名是scr,在文件格式上与exe可执行文件是完全一样的。我们的屏幕保护程序经过编译、汇编、链接过后,修改后缀名为scr,再将其拷贝到C:\Windows\system32下就可以被操作系统识别、运用。
  • 本程序是一个将照片进行轮播的屏幕保护程序,可以将当前登录用户照片目录下的图片自动应用作为屏幕保护轮播的素材。暂时完美支持jpg、png、jpeg、bmp格式的图片,gif格式暂时只能静态显示,不支持播放动画。

二、数据结构分析

  • 目标文件名存储:

使用voctor&t;string>存储文件名。程序开始,首先需要将用户目录下的Pictures目录下的jpg、jpeg、png、gif、bmp格式的图片文件名用于打开文件。

  • 图片文件参数存储

使用struct g_hBitmapStruct{};存储当前要显示的图片数据,包括图片句柄和图片像素尺寸参数。

数据结构

三、程序消息分析

操作系统消息

  • 当用户在操作系统中设定屏幕保护程序时,点击预览会触发“/p”消息,屏幕保护程序应当在预览窗口做出对应消息应答(显示预览或则与用户交互)
  • 当用户在设定屏幕保护程序时点击设置按钮,操作系统会触发“/c”消息,此时,屏幕保护程序也应当作出对应消息应答(如:提供配置界面或拒绝配置)
  • 正常情况下,操作系统自动启用屏幕保护程序,会触发“/s”消息,此时正常进入程序运行。用户动作消息

用户动作消息

  • 用户动作消息主要是当屏保程序正在运行时,用户向系统作出动作,屏保程序检测到后,应当自动释放资源并退出程序。(如:按键消息、鼠标点击、移动消息等)

四、主要程序代码

  • 设置定时器,调用SetTimer函数,设置定时器ID、定时时间(30S)和触发函数

定时器

 

定时器

  • 获取用户名确定目标路径

调用GetUserName函数,获取当前登陆的用户名,组装文件路径

取得用户名

从文件路径取得支持的文件名,存入vector<string> FilesName

保存

  • WM_PAINT消息处理

对图像的显示

  • 运行展示及使用方法

 测试机C:\Users\%USERNAME%\Pictures目录下的图片有:

  • 运行

 可将exe文件修改后缀名为.scr,并将文件放到C:\windows\Ststem32下,就可以在操作系统里使用该程序了。

项目地址①:https://download.csdn.net/download/qq_18647249/12295557

项目地址②:https://gitee.com/yichenglin/windows_screensaver.git