C#/WPF 设置和启动Windows屏保程序

前言

我们平时电脑启动的屏保程序其本质也是应用程序,只是后缀名为.scr。所以我们只需要把应用程序后缀改为.scr,然后右键选择安装即可启动我们自己的屏保程序。

屏保注册表参数

设置电脑屏保参数,在个性化设置>锁屏界面>屏幕保护程序设置进行调节和设置。设置完成后参数会写入注册表,电脑会根据注册表中设置的参数启动屏保程序。我们也可以使用程序直接设置注册表屏保参数,启动我们自定义屏保程序。

屏保注册表参数如下

  • SCRNSAVE.EXE:默认屏保程序,我们可将此键值设置为我们制作的程序(程序后缀为.scr)
  • ScreenSaveActive:屏保状态,1为启动,0为关闭
  • ScreenSaveTimeout:屏幕保护程序启动前系统的空闲事件,单位为秒,默认为900(15分钟)
  • ScreenSaverIsSecure:默认参数为0,标识不需要用户密码登录即可启动屏保

C#/WPF代码启动自定义屏保

cs 复制代码
    internal class ComputerHelper
    {
        [DllImport("user32.dll")]
        private static extern int SendMessage(int hWnd, int Msg, int wParam, int lParam);
        private const int HWND_BROADCAST = 0xffff;
        private const int WM_SYSCOMMAND = 0x112;
        private const int SC_SCREENSAVE = 0xf140;

        /// <summary>
        /// 启动屏幕程序
        /// </summary>
        public static void ScreenSaveStart()
        {
            SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_SCREENSAVE, 0);
        }
    }


    public partial class MainWindow : Window
    {
        private string screenSaver = "D:\\Test.scr";
        public MainWindow()
        {
            InitializeComponent();
        }

        #region Methods
        /// <summary>
        /// 更新屏保注册表参数
        /// </summary>
        private void UpdateScreenSaverRegist()
        {
            //获取user根项
            RegistryKey user = Registry.CurrentUser;
            //打开desktop项
            RegistryKey desktop = user.OpenSubKey("Control Panel\\Desktop", true);
            if(desktop != null) 
            {
                //设置屏保程序位置
                desktop.SetValue("SCRNSAVE.EXE", screenSaver);
                //是否启动屏保 0:不启动 1:启动
                desktop.SetValue("ScreenSaveActive", "1");
                //退出屏保后是否需要登录 0:不需要 1:需要
                desktop.SetValue("ScreenSaverIsSecure", "1");
                //电脑无操作后启动屏保时间
                desktop.SetValue("ScreenSaveTimeout", "60");
            }
        }
        #endregion

        private void btnSetScreenSaver_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                UpdateScreenSaverRegist();
                ComputerHelper.ScreenSaveStart();
            }
            catch (Exception ex)
            {
                MessageBox.Show($"设置屏保失败->{ex.Message}");
            }        
        }
    }

实例链接:https://download.csdn.net/download/lvxingzhe3/88746976

相关推荐
hhh3u3u3u2 小时前
Visual C++ 6.0中文版安装包下载教程及win11安装教程
java·c语言·开发语言·c++·python·c#·vc-1
加号32 小时前
【C#】实现沃德普线光控制器通信控制(附完整源码)
开发语言·c#
lzhdim3 小时前
SharpCompress:跨平台的 C# 压缩与解压库
开发语言·c#
~plus~5 小时前
.NET 8 C# 委托与事件实战教程
网络·c#·.net·.net 8·委托与事件·c#进阶
beyond谚语6 小时前
接口&抽象类
c#·接口隔离原则·抽象类
新手小新6 小时前
C#学习笔记1-在VS CODE部署C#开发环境
笔记·学习·c#
rockey6279 小时前
AScript动态脚本多语言环境支持
sql·c#·.net·script·eval·function·动态脚本
ou.cs10 小时前
c# SemaphoreSlim保姆级教程
开发语言·网络·c#
龙侠九重天10 小时前
ML.NET 实战:快速构建分类模型
分类·数据挖掘·c#·.net
fengyehongWorld11 小时前
C# 创建Worker,杀死指定程序的线程
c#