使用 WPF 开发一个 Windows 屏幕保护程序
最近有小伙伴问我如何可以让 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 屏幕保护程序的更多相关文章
- windows屏幕保护程序opengl模板
Visual Studio 2013 屏幕保护程序opengl模板 ScreenSaver.cpp #define VC_EXTRALEAN #include <windows.h> #i ...
- Windows 屏幕保护程序
{ 创建一个win32 窗口项目,不是控制台的 把exe改为src文件 复制到windows目录下 ok }
- 使用C#开发屏幕保护程序步骤
本文介绍使用C#制作屏幕保护的方法,这个屏幕保护就是仿效视窗系统自带的字幕屏保. 屏幕保护程序的扩展名虽然是"scr",但其实是一个可执行的"exe"文件.但他 ...
- windows系统操作类和演示程序(关机,关闭显示器,打开屏幕保护程序,打开光驱等)
/// <summary> /// 系统控制类,关机,关闭显示器,打开屏幕保存程序等 /// </summary> public class SystemPowerContro ...
- SystemParametersInfo调置壁纸、屏幕保护程序
应用SystemParametersInfo函数可以获取和设置数量众多的windows系统参数.这个小程序就是运用了SystemParametersInfo函数来设置桌面的墙纸,而且程序可以让我们选择 ...
- Window权限维持(五):屏幕保护程序
屏幕保护是Windows功能的一部分,使用户可以在一段时间不活动后放置屏幕消息或图形动画.众所周知,Windows的此功能被威胁参与者滥用为持久性方法.这是因为屏幕保护程序是具有.scr文件扩展名的可 ...
- Android | 教你如何用代码开发一个拍照翻译小程序
引子 想必有很多小伙伴喜欢外出旅游,能去海外玩一圈那是更好不过了,旅游前大家一定会对吃.穿.住.行.游玩路线做各种攻略,然后满怀期待的出发- 想象中的旅游 出发前,想象中的旅游目的地可能有漂亮 ...
- C++使用代码创建一个Windows桌面应用程序
WinMain函数 Windows应用程序的唯一程序入口. 函数原型 int WINAPI WinMain { HINSTANCE hInstancem HINSTANCE hPreInstance, ...
- 开发一个 Windows 级别的操作系统难度有多大?
在搜索进程相关问题的时候,无意间看到了知乎上面的这个问题,这也是困惑我的问题,只是自己比较懒,没有刨根问底,这次无意间看到了,并且认真看了大神的回答,很受启发,作为记录,贴于此,与各位分享: 来源:知 ...
随机推荐
- Flutter学习笔记(三)-- 事件交互和State管理
先来看看准备界面: image.png 目标是修改图中红色实线框中的喜欢和不喜欢的五角星的修改,以及数字的修改. 在修改之前,有必要先了解一些相关的信息. 知识点 前面简单的提到过,有些Widget是 ...
- android listview的HeadView左右切换图片(仿新浪,网易,百度等切换图片)
首先我们还是看一些示例:(网易,新浪,百度) 显示效果都不错,可是手感就不一样了,百度最棒,网易还行,新浪就操作很不好,这里我说的是滑动切换图片.自己可以测试一下.不得不说牛叉的公司确实有哦牛叉的道理 ...
- ASCII码、ISO8859-1、Unicode、GBK和UTF-8 的区别
为什么需要编码? 计算机中最小的存储单位是字节(byte),一个字节所能表示的字符数又有限,1byte=8bit,一个字节最多也只能表示255个字符,而世界上的语种又多,都有各种不同的字符,无法用一个 ...
- ArcGIS API for Silverlight——小滑块
Widgets翻译过来是小玩具.如果使用过Dojo或者ExtJS等js框架肯定会了解到这个“小玩具”也有大用处,能够在很大程度上减少我们的工作量,快速完成功能需求.能减少多大工作量呢?让我们先来,点击 ...
- 【异常】Application failed to start due to an exception org.springframework.beans.factory.BeanCurrentlyInCreationException
一. 异常信息: 2018-05-17 18:03:22.224 -DEBUG [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter ...
- Rspec: feature spec 功能测试 测试JavaScript.
我们要把应用各组件放在一起做集成 测试,这样才能保证模型和控制器之间能够良好契合. 在 RSpec 中,这种测试称为功能测试(feature spec),有时也称为验收测试(acceptance te ...
- php--------使用js生成二维码
php生成二维码有多种方式,可以在JS中,也可以使用php库,今天写的这个小案例是使用JS生成二维码. 其他方式可以看下一篇文章:php--------php库生成二维码和有logo的二维码 网站开发 ...
- 介绍 Jersey 依赖
Jersey 使用 Apache Maven 进行构造和安装.非快照(Non-snapshot)Jersey 发行版本是不会部署到 中心 Maven 仓库(Central Maven Reposito ...
- Hackintosh Power Management
Also, be aware that hibernation (suspend to disk or S4 sleep) is not supported on hackintosh. You sh ...
- linux进程原语之fork()
一.用法解析: fork()这个函数,可以说是名如其人了,众所周知fork这个单词本意为叉子,老外取学术名字的时候总会有一些象形的想法,于是就有了下图~ fork()函数是计算机程序设计中的分叉函数. ...