使用 WPF 开发一个 Windows 屏幕保护程序

吕毅 2020/1/23 13:04:27

最近有小伙伴问我如何可以让 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 的受信任目录下,你的程序是无法运行起来的。正确的做法,是右键,使用 “安装” 选项进行安装。

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


参考资料

blog footer

随时随地学软件编程-关注百度小程序和微信小程序
关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[使用 WPF 开发一个 Windows 屏幕保护程序]http://www.zyiz.net/tech/detail-100493.html

上一篇:.NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件

下一篇:文件和文件夹不存在的时候,FileSystemWatcher 监听不到文件的改变?如果递归地监听就可以了

赞(0)
关注微信小程序
程序员编程王-随时随地学编程

扫描二维码或查找【程序员编程王】

可以随时随地学编程啦!

技术文章导航 更多>
扫一扫关注最新编程教程