最近有小伙伴问我如何可以让 Windows 静置一段时间不操作之后,显示一个特殊的界面。我想了想,屏幕保护程序可以做到这一点,而且,屏幕保护程序的开发也是非常简单的。

本文将介绍如何为 Windows 这一悠久的功能进行开发。


屏幕保护程序的本质

屏幕保护程序本质上就是一个 Win32 窗口应用程序。

好了,这一节真的结束了……

编译好一个窗口应用程序之后,把扩展名改为 scr,于是你的屏幕保护程序就做好了。

安装屏幕保护程序

现在,在你的 scr 程序上点击右键,可以看到一个 “安装” 选项,点击之后就安装了。

安装之后,你会立即看到我们的屏幕保护程序已经运行起来了。

为了方便截图,我调了下窗口大小。实际上本应该是 Visual Studio 创建的空 WPF 程序的默认大小。

处理屏幕保护程序参数

我的屏幕保护程序是一个非常简单的程序,几乎就是默认的模板。只是,现在加上了一点文字,输出命令行参数。

<Window x:Class="Walterlv.DirextXDemo.Wpf.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="Walterlv.ScreenSaver" Height="450" Width="800">
<Grid>
<TextBlock x:Name="ArgsTextBlock" VerticalAlignment="Center" TextAlignment="Center" />
</Grid>
</Window>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Loaded += OnLoaded;
} private async void OnLoaded(object sender, RoutedEventArgs e)
{
var args = Environment.GetCommandLineArgs().Skip(1).ToArray();
Args.Text = string.Join(Environment.NewLine, args);
}
}

在前面的截图中,我们看到参数是 “/p 8457636”,这是表示此程序需要在预览窗格中进行预览。

还有其他参数,用于处理其他情况:

  • /s 屏幕保护程序开始,或者用户点击了 “预览” 按钮
  • /c:463970 用户点击了 “设置” 按钮
  • /p 8457636 用户选中屏幕保护程序之后,在预览窗格中显示

实际上屏幕保护程序开始和预览是不同的。预览的时候,只会启动你的程序;而实际开始的时候,Windows 会先为你创建一个白色的背景,覆盖所有的屏幕,然后你的屏幕保护程序窗口显示在那个白色的背景之上。

请预防一些坑

你可能会发现 Windows 自带的屏幕保护程序在 C:\Windows\System32 文件夹中。但!那不是你放屏幕保护程序的地方!如果把你的屏幕保护程序拷贝到那个 Windows 的受信任目录下,你的程序是无法运行起来的。正确的做法,是右键,使用 “安装” 选项进行安装。

我后面附的链接中可能说屏幕保护程序还要有一些其他的要求,例如必须全屏、不要显示到任务栏等等。但那其实并不是强制性的要求,比如本文就显示了一个普通的窗口。


参考资料


我的博客会首发于 https://walterlv.com/,而 CSDN 和博客园仅从其中摘选发布,而且一旦发布了就不再更新。

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://blog.csdn.net/wpwalter),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

使用 WPF 开发一个 Windows 屏幕保护程序的更多相关文章

  1. windows屏幕保护程序opengl模板

    Visual Studio 2013 屏幕保护程序opengl模板 ScreenSaver.cpp #define VC_EXTRALEAN #include <windows.h> #i ...

  2. Windows 屏幕保护程序

    { 创建一个win32 窗口项目,不是控制台的 把exe改为src文件 复制到windows目录下 ok }

  3. 使用C#开发屏幕保护程序步骤

    本文介绍使用C#制作屏幕保护的方法,这个屏幕保护就是仿效视窗系统自带的字幕屏保. 屏幕保护程序的扩展名虽然是"scr",但其实是一个可执行的"exe"文件.但他 ...

  4. windows系统操作类和演示程序(关机,关闭显示器,打开屏幕保护程序,打开光驱等)

    /// <summary> /// 系统控制类,关机,关闭显示器,打开屏幕保存程序等 /// </summary> public class SystemPowerContro ...

  5. SystemParametersInfo调置壁纸、屏幕保护程序

    应用SystemParametersInfo函数可以获取和设置数量众多的windows系统参数.这个小程序就是运用了SystemParametersInfo函数来设置桌面的墙纸,而且程序可以让我们选择 ...

  6. Window权限维持(五):屏幕保护程序

    屏幕保护是Windows功能的一部分,使用户可以在一段时间不活动后放置屏幕消息或图形动画.众所周知,Windows的此功能被威胁参与者滥用为持久性方法.这是因为屏幕保护程序是具有.scr文件扩展名的可 ...

  7. Android | 教你如何用代码开发一个拍照翻译小程序

    引子   想必有很多小伙伴喜欢外出旅游,能去海外玩一圈那是更好不过了,旅游前大家一定会对吃.穿.住.行.游玩路线做各种攻略,然后满怀期待的出发- 想象中的旅游   出发前,想象中的旅游目的地可能有漂亮 ...

  8. C++使用代码创建一个Windows桌面应用程序

    WinMain函数 Windows应用程序的唯一程序入口. 函数原型 int WINAPI WinMain { HINSTANCE hInstancem HINSTANCE hPreInstance, ...

  9. 开发一个 Windows 级别的操作系统难度有多大?

    在搜索进程相关问题的时候,无意间看到了知乎上面的这个问题,这也是困惑我的问题,只是自己比较懒,没有刨根问底,这次无意间看到了,并且认真看了大神的回答,很受启发,作为记录,贴于此,与各位分享: 来源:知 ...

随机推荐

  1. json-rpc和restful

    json-rpc是一种动作 restful 是一种资源 RPC 所谓的远程过程调用 (面向方法) SOA 所谓的面向服务的架构(面向消息) REST 所谓的 Representational stat ...

  2. 关于C和C++

    最开始学的就是C和C++,但只是学过,根本就不知道怎么使用. 后来接触了Python和Perl才知道怎么将编程应用于实际需求当中,读取文件,存放到数据结构,处理,输出. 但脚本语言有其固有的缺点,不能 ...

  3. 百度安卓SDK秘钥Key错误

    下载官方安卓地图demo,输入报名和sha1申请AK,发现key错误 构建的时候要指定生成的key 安卓定位BaiduLocDemo出现aapt.exe finished with non-zero ...

  4. Three Pieces CodeForces - 1065D (BFS)

    链接 大意: n*n棋盘, 每个格子写有数字, 各不相同, 范围[1,n*n], 初始在数字1的位置, 可以操纵knight,bishop,rook三种棋子, 每走一步花费1, 交换棋子花费1, 问按 ...

  5. python-day43--单表查询之关键字执行优先级(重点)

    一.关键字的执行优先级(重点) 1.关键字执行优先级 from where #约束条件(在数据产生之前执行) group by #分组 没有分组则默认一组 按照select后的字段取得一张新的虚拟表, ...

  6. sql表联接

    1.join: 表:erp_orders和erp_orders_products SELECT * FROM erp_orders_products AS products, erp_orders A ...

  7. TCP和UDP最完整的区别

    TCP与UDP基本区别  1.基于连接与无连接  2.TCP要求系统资源较多,UDP较少:   3.UDP程序结构较简单   4.流模式(TCP)与数据报模式(UDP);   5.TCP保证数据正确性 ...

  8. dubbo 心跳

    HeartBeatTask 类封装了心跳定时任务,需要了解的是 provider 和 consumer 都有可能发送心跳. final class HeartBeatTask implements R ...

  9. Pandas DataFrame 数据选取和过滤

    This would allow chaining operations like: pd.read_csv('imdb.txt') .sort(columns='year') .filter(lam ...

  10. nodejs初探一二

    概念 简单来说,node.js 是一个让 JavaScript 运行在服务端的开发平台,让开发者通过JS编写服务端程序. 安装 从nodeJS官网下载对应平台的安装程序,安装完成后,打开命令行工具,然 ...