如何以编程方式设置
Windows 7 Wallpaper幻灯片?
设置普通壁纸
[DllImport("user32.dll",CharSet = CharSet.Auto)] private static extern Int32 SystemParametersInfo(UInt32 uiAction,UInt32 uiParam,String pvParam,UInt32 fWinIni); private static UInt32 SPI_SETDESKWALLPAPER = 20; private static UInt32 SPIF_UPDATEINIFILE = 0x1; public void SetImage(string filename) { SystemParametersInfo(SPI_SETDESKWALLPAPER,filename,SPIF_UPDATEINIFILE); }
我到现在才发现:
C:\Users\CurrentUser\AppData\Roaming\Microsoft\Windows\Themes\
C:\Users\CurrentUser\AppData\Roaming\Microsoft\Windows\Themes\TranscodedWallpaper.jpg
(during a slideshow the file is changing automatically)
解决方法
试试这个
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(Uri uri,Style style) { System.IO.Stream s = new System.Net.WebClient().OpenRead(uri.ToString()); System.Drawing.Image img = System.Drawing.Image.FromStream(s); string tempPath = Path.Combine(Path.GetTempPath(),"wallpaper.bmp"); img.Save(tempPath,System.Drawing.Imaging.ImageFormat.Bmp); 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()); } SystemParametersInfo(SPI_SETDESKWALLPAPER,tempPath,SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE); } }
最初的问题是this