如何以编程方式更改屏幕保护程序?

我想使用C#将当前的屏幕保护程序更改为自定义的屏幕保护程序(之前我将其作为Visual Studio中的资源加载)。 这怎么可能呢? 我已经在Google和SO上find了它,但都是关于“如何创build屏幕保护程序”,而不是“如何更改屏幕保护程序”。 如果可能的话,它应该在WinXP,Vista和7上运行。

Solutions Collecting From Web of "如何以编程方式更改屏幕保护程序?"

我会用我工作的那段代码来回答我的问题:

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()); } } } 

然后,从我的应用程序调用它时:

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

我读了一个地方我应该写一个不超过8个字符的名字(有点怪异的,但XP都是这样的),所以我的屏幕保护程序被称为svr1.scr (不是真正的面向对象,但没有窍门)

这是安装新窗口时执行的命令

 rundll32.exe desk.cpl,InstallScreenSaver %l