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

相关推荐
唐青枫1 小时前
别滥用 Task.Run:C# 异步并发实操指南
c#·.net
我好喜欢你~8 小时前
C#---StopWatch类
开发语言·c#
一阵没来由的风12 小时前
拒绝造轮子(C#篇)ZLG CAN卡驱动封装应用
c#·can·封装·zlg·基础封装·轮子
✎ ﹏梦醒͜ღ҉繁华落℘14 小时前
开发WPF项目时遇到的问题总结
wpf
一枚小小程序员哈18 小时前
基于微信小程序的家教服务平台的设计与实现/基于asp.net/c#的家教服务平台/基于asp.net/c#的家教管理系统
后端·c#·asp.net
Eternity_GQM19 小时前
【Word VBA Zotero 引用宏错误分析与改正指南】【解决[21–23]参考文献格式插入超链接问题】
开发语言·c#·word
cimeo1 天前
【C 学习】06-算法&程序设计举例
c#
百锦再1 天前
.NET 的 WebApi 项目必要可配置项都有哪些?
java·开发语言·c#·.net·core·net
WYH2871 天前
C#控制台输入(Read()、ReadKey()和ReadLine())
开发语言·c#
hqwest1 天前
C#WPF实战出真汁06--【系统设置】--餐桌类型设置
c#·.net·wpf·布局·分页·命令·viewmodel