使用以下代码设置桌面墙纸时出现问题。 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;
}
}
答案 0 :(得分:1)
SPI_SETDESKWALLPAPER
的值应为0x14
,而不是30
。
SPIF_UPDATEINIFILE
和SPIF_SENDWININICHANGE
也应为uint
类型。
const uint SPI_SETDESKWALLPAPER = 0x14; const uint SPIF_UPDATEINIFILE = 0x01; const uint SPIF_SENDWININICHANGE = 0x02;
答案 1 :(得分:1)
我写了一个非常相似的应用程序,我使用这些值,它适用于我:
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);
}
答案 2 :(得分:1)
我刚试过这个,它对我有用。顺便说一句,根据操作系统,它只适用于Bitmaps,如果您尝试任何其他格式,则需要转换为位图。
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);
}
}
}