我正在尝试在C#.net中创建一个程序,每次运行时都会更改桌面壁纸。我已经制作了一个程序来改变目标图像并且工作完美,但是当桌面壁纸改变时,它只显示一个非常小的黑色边框图像。以下是相关代码:
const int setDesktopWallpaper = 20;
const int updateIniFile = 0x01;
const int sendWinIniChange = 0x02;
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);
public static void setWallpaper()
{
string userName = WindowsIdentity.GetCurrent().Name; // returns COMPUTERNAME\Username
string[] badUserName = userName.Split('\\');
string goodUserName = badUserName[1];
string folderName = @"C:\Users\" + goodUserName + @"\Documents\DesktopPictures";
string[] images = File.ReadAllLines(folderName + @"\Images.txt");
string image = images[0];
string extension = Path.GetExtension(image);
string fileName = folderName + @"\0" + extension;
RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop", true);
SystemParametersInfo(setDesktopWallpaper, 0, fileName, updateIniFile | sendWinIniChange);
}
前三个变量来自YouTube教程,接下来的两行也是如此。在setWallpaper类中,前8行获取图像的路径,其余部分来自实际更改壁纸的教程。
基本上我想知道的是如何使用C#.net更改桌面墙纸,其中图像覆盖整个桌面背景。
非常感谢:)
答案 0 :(得分:1)
您需要使用注册表项将背景样式设置为“Stretched”。
此行之后
RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop", true);
添加
key.SetValue("WallpaperStyle", "2");
key.SetValue("TileWallpaper", "0");