How do I change the screensaver programmatically?

前端 未结 2 1128
说谎
说谎 2021-01-17 21:51

I\'d like to change the current Screensaver for a custom one (which I previously loaded as a resource in Visual Studio) using C#. How could that be done? I\'ve looked for it

相关标签:
2条回答
  • 2021-01-17 22:24

    I'll answer my question with the piece of code that worked to me:

    public sealed class Screensaver
    {
        Screensaver() { }
    
        const int SPI_SETSCREENSAVEACTIVE = 0x0011;
    
        [DllImport("user32", CharSet=CharSet.Auto)]
        unsafe public static extern short SystemParametersInfo (int uiAction, int uiParam, int* pvParam, int fWinIni);
    
        public static void Set(string path)
        {
            try
            {
                RegistryKey oKey = Registry.CurrentUser.OpenSubKey("Control Panel",
                true);
                oKey = oKey.OpenSubKey("desktop", true);
                oKey.SetValue("SCRNSAVE.EXE", path);
                oKey.SetValue("ScreenSaveActive", "1");
    
                unsafe
                {
                    int nX = 1;
                    SystemParametersInfo(
                    SPI_SETSCREENSAVEACTIVE,
                    0,
                    &nX,
                    0
                    );
                }
            }
            catch (Exception exc)
            {
                System.Windows.Forms.MessageBox.Show(exc.ToString());
            }
        }
    }
    

    Then, when calling it from my application:

    static string ResourcePath(string resource)
    {
        return Application.StartupPath + "\\Resources\\" + resource;
    }
    
    Program.Screensaver.Set(Program.ResourcePath("svr1.scr"));
    

    I read somewhere I should write a name no longer than 8 characters (a bit weird, but XP is all like this), so my screensaver is called svr1.scr (not really object oriented, but does the trick)

    0 讨论(0)
  • 2021-01-17 22:27

    This is the command that windows executes when installing a new one

    rundll32.exe desk.cpl,InstallScreenSaver %l
    
    0 讨论(0)
提交回复
热议问题