前言
我们平时电脑启动的屏保程序其本质也是应用程序,只是后缀名为.scr。所以我们只需要把应用程序后缀改为.scr,然后右键选择安装即可启动我们自己的屏保程序。
屏保注册表参数
设置电脑屏保参数,在个性化设置>锁屏界面>屏幕保护程序设置进行调节和设置。设置完成后参数会写入注册表,电脑会根据注册表中设置的参数启动屏保程序。我们也可以使用程序直接设置注册表屏保参数,启动我们自定义屏保程序。
屏保注册表参数如下
- SCRNSAVE.EXE:默认屏保程序,我们可将此键值设置为我们制作的程序(程序后缀为.scr)
- ScreenSaveActive:屏保状态,1为启动,0为关闭
- ScreenSaveTimeout:屏幕保护程序启动前系统的空闲事件,单位为秒,默认为900(15分钟)
- ScreenSaverIsSecure:默认参数为0,标识不需要用户密码登录即可启动屏保
C#/WPF代码启动自定义屏保
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");}}#endregionprivate 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