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

相关推荐
lph19721 小时前
wpf的converter
wpf
fyifei05581 小时前
WPF学习PropertyChanged
wpf
钢铁男儿1 小时前
C# 类和继承(扩展方法)
java·servlet·c#
爱炸薯条的小朋友1 小时前
C#由于获取WPF窗口名称造成的异常报错问题
windows·c#·wpf
baivfhpwxf20232 小时前
wpf ListBox 去除item 单击样式
wpf
诗仙&李白2 小时前
lnnovationHubTool,用prism+WPF编写的MVVM模式的快速上位机软件开发框架平台
wpf·mvvm·prism·上位机软件开发框架平台
Rose 使者3 小时前
全球IP归属地查询接口如何用C#进行调用?
c#·api·ip地址
~plus~5 小时前
Harmony核心:动态方法修补与.NET游戏Mod开发
开发语言·jvm·经验分享·后端·程序人生·c#
htj105 小时前
C# 使用正则表达式
正则表达式·c#
~plus~5 小时前
WPF八大法则:告别模态窗口卡顿
开发语言·经验分享·后端·程序人生·c#