Comment puis-je changer mon fond d'écran Windows par programmation?

J'avais souhaitez mettre un fond d'écran pour Windows XP à l'aide de C#. J'ai développé le code de sorte qu'il fonctionne parfaitement sous Windows 7, mais apparemment ce n'est pas la même pour XP. J'ajoute que fond d'écran comme une ressource, définir son action compilation comme Contenu et comme Toujours exemplaire. C', curieusement, définit le bon papier Peint de nom à l'intérieur du Bureau de la boîte de dialogue propriétés. Cependant, le papier peint n'est pas définie. Mon code ressemble à ceci:

public sealed class Wallpaper
{
    Wallpaper() { }

    const int SPI_SETDESKWALLPAPER = 20;
    const int SPIF_UPDATEINIFILE = 0x01;
    const int SPIF_SENDWININICHANGE = 0x02;

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);

    public enum Style : int
    {
        Tiled,
        Centered,
        Stretched
    }

    public static void Set(string wpaper, Style style)
    {
        RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop", true);
        if (style == Style.Stretched)
        {
            key.SetValue(@"WallpaperStyle", 2.ToString());
            key.SetValue(@"TileWallpaper", 0.ToString());
        }

        if (style == Style.Centered)
        {
            key.SetValue(@"WallpaperStyle", 1.ToString());
            key.SetValue(@"TileWallpaper", 0.ToString());
        }

        if (style == Style.Tiled)
        {
            key.SetValue(@"WallpaperStyle", 1.ToString());
            key.SetValue(@"TileWallpaper", 1.ToString());
        }

        string tempPath = "Resources\\"+wpaper;
        SystemParametersInfo(SPI_SETDESKWALLPAPER,
            0,
            tempPath,
            SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);
    }
}

Lors de l'appel de fond d'écran.("Wpapername"), il obtient le fond d'écran à partir des ressources du projet. Il fonctionne sur Win7, mais pas sur WinXP. Suis-je en train de faire quelque chose de mal?

Cette question peut-être exactement ce dont vous avez besoin.
J'ai basé mon code à partir de celui-là, mais mes fonds d'écran doivent être déployés à l'aide de l'application.
Il se pourrait que XP ne gère pas le chemin d'accès relatif, et vous devrez peut-être spécifier le chemin d'accès complet vers le fond d'écran.
possible en double stackoverflow.com/questions/1061678/...

OriginalL'auteur Korcholis | 2011-12-07