There is no simple way to set the wallpaper. We have to use a Windows DLL to do that.
And this DLL is able to set the wallpaper only if the image is a BMP. So we have to convert it first.
using Microsoft.Win32; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Runtime.InteropServices; namespace WindowsStarter { public static class WallpaperManager { 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 imgPath, Style style) { var img = Image.FromFile(Path.GetFullPath(imgPath)); string tempPath = Path.Combine(Path.GetTempPath(), "wallpaper.bmp"); img.Save(tempPath, ImageFormat.Bmp); var key = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop", true); switch (style) { case Style.Tiled: key.SetValue(@"WallpaperStyle", 1.ToString()); key.SetValue(@"TileWallpaper", 1.ToString()); break; case Style.Centered: key.SetValue(@"WallpaperStyle", 1.ToString()); key.SetValue(@"TileWallpaper", 0.ToString()); break; case Style.Stretched: key.SetValue(@"WallpaperStyle", 2.ToString()); key.SetValue(@"TileWallpaper", 0.ToString()); break; default: break; } SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, tempPath, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE); } } }