Question

Je voudrais changer l'économiseur d'écran actuel pour un personnalisé (qui je l'ai déjà chargé en tant que ressource dans Visual Studio) en utilisant C #. Comment cela pourrait-il faire? J'ai cherché sur Google et SO, mais toutes les discussions sur « Comment créer un écran de veille », et non « Comment changer un écran de veille ». Si possible, il devrait fonctionner sur Windows XP, Vista et 7.

Était-ce utile?

La solution

Je vais répondre à ma question avec le morceau de code qui a fonctionné pour moi:

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

Ensuite, lors de l'appel de ma demande:

static string ResourcePath(string resource)
{
    return Application.StartupPath + "\\Resources\\" + resource;
}

Program.Screensaver.Set(Program.ResourcePath("svr1.scr"));

Je lis quelque part que je devrais écrire un nom plus de 8 caractères (un peu bizarre, mais XP est tout comme ça), de sorte que mon écran de veille est appelé svr1.scr (pas vraiment orienté objet, mais le tour est joué)

Autres conseils

Ceci est la commande que Windows exécute lors de l'installation d'un nouveau

rundll32.exe desk.cpl,InstallScreenSaver %l
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top