使用C#更改桌面墙纸当前显示的是微小图像

时间:2015-12-28 01:56:57

标签: c# .net

我正在尝试在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更改桌面墙纸,其中图像覆盖整个桌面背景。

非常感谢:)

1 个答案:

答案 0 :(得分:1)

您需要使用注册表项将背景样式设置为“Stretched”。

此行之后

RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop", true);

添加

key.SetValue("WallpaperStyle", "2");
key.SetValue("TileWallpaper", "0");