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

相关推荐
烛阴7 分钟前
代码的“病历本”:深入解读C#常见异常
前端·c#
Macbethad17 分钟前
工业设备配方管理系统技术方案
wpf
努力小周33 分钟前
基于STM32的智能台灯系统设计与实现
stm32·单片机·嵌入式硬件·c#·毕业设计·毕设·javaee
arron88991 小时前
C# 项目源码进行全面的技术架构和调用逻辑分析。以下是系统性的技术方案
开发语言·架构·c#
喵叔哟2 小时前
7.日志系统深入
wpf
一个帅气昵称啊2 小时前
.Net使用AgentFramework进行多Agent工作流编排-智能体AI开发
c#·.net·agentframework
czhc11400756632 小时前
Winform126 DataGrIdView ListView
c#·winform
清风徐来Groot3 小时前
WPF布局之Grid
wpf
csdn_aspnet3 小时前
C# .NETCore json字符串压缩为一行
c#·json·.netcore
斯内科3 小时前
C#验证拉马努金圆周率公式
c#·拉马努金圆周率