定期更改桌面墙纸

我在使用以下代码设置桌面墙纸时遇到问题。 SystemParametersInfo返回true但不更改壁纸。 没有任何变化,它与以前一样。 但我希望代码能够定期从* .bmp文件目录中更改壁纸。 请让我知道我在哪里弄错了。

class Program { [DllImport("user32.dll")] public static extern bool SystemParametersInfo(UInt32 uiAction, UInt32 uiParam, string pvParam, UInt32 fWinIni); static FileInfo[] images; static int currentImage; static void Main(string[] args) { DirectoryInfo dirInfo = new DirectoryInfo(@"C:/users/Smart-PC/Desktop"); images = dirInfo.GetFiles("*.bmp", SearchOption.TopDirectoryOnly); currentImage = 0; System.Timers.Timer imageChangeTimer = new Timer(5000); imageChangeTimer.Elapsed += new ElapsedEventHandler(imageChangeTimer_Elapsed); imageChangeTimer.Start(); Console.ReadLine(); } static void imageChangeTimer_Elapsed(object sender, ElapsedEventArgs e) { const uint SPI_SETDESKWALLPAPER = 30; const int SPIF_UPDATEINIFILE = 0x01; const int SPIF_SENDWININICHANGE = 0x02; bool gk; gk = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, images[currentImage++].FullName, SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE); Console.Write(gk); Console.WriteLine(images[currentImage].FullName); currentImage = (currentImage >= images.Length) ? 0 : currentImage; } } 

我刚试过这个,它对我有用。 顺便说一句,根据操作系统,它只适用于位图,如果你尝试任何其他格式,你需要转换为位图。

 using System; using System.Runtime.InteropServices; namespace ConsoleApplication1 { class Program { [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; private static String imageFileName = "c:\\test\\test.bmp"; static void Main(string[] args) { SetImage(imageFileName); Console.ReadKey(); } private static void SetImage(string filename) { SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, filename, SPIF_UPDATEINIFILE); } } } 

SPI_SETDESKWALLPAPER的值应为0x14而不是30

SPIF_UPDATEINIFILESPIF_SENDWININICHANGE应该是uint类型。

 const uint SPI_SETDESKWALLPAPER = 0x14; const uint SPIF_UPDATEINIFILE = 0x01; const uint SPIF_SENDWININICHANGE = 0x02; 

我写了一个非常相似的应用程序,我使用这些值,它适用于我:

 public void SetWallpaper(String path) { // DLL Import [DllImport("user32.dll", CharSet = CharSet.Auto)] private static extern int SystemParametersInfo( Int32 uAction, Int32 uParam, String lpvParam, Int32 fuWinIni); // Consts private const Int32 SPI_SETDESKWALLPAPER = 20; private const Int32 SPIF_UPDATEINIFILE = 0x01; private const Int32 SPIF_SENDWININICHANGE = 0x02; // Changing the background. SystemParametersInfo( SPI_SETDESKWALLPAPER, 0, path, // desktopBackground is the bmp location SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE); }