Trying to make a powershell program that changes your wallpaper - only changes wallpaper to black (Windows 11)

40 Views Asked by At

As title says - the wallpaper is only turning black. Here is the code I am currently using (found it on a website (I think it was stackoverflow) that I cannot find again for the life of me):

function Set-Wallpaper {
    param (
        [string]$Path = ".\wallpaper.png",
        [ValidateSet('Tile', 'Center', 'Stretch', 'Fill', 'Fit', 'Span')]
        [string]$Style = 'Fill'
    )

    begin {
        try {
            Add-Type @"
                using System;
                using System.Runtime.InteropServices;
                using Microsoft.Win32;
                namespace Wallpaper
                {
                    public enum Style : int
                    {
                        Tile, Center, Stretch, Fill, Fit, Span, NoChange
                    }

                    public class Setter
                    {
                        public const int SetDesktopWallpaper = 20;
                        public const int UpdateIniFile = 0x01;
                        public const int SendWinIniChange = 0x02;
                        [DllImport( "user32.dll", SetLastError = true, CharSet = CharSet.Auto )]
                        private static extern int SystemParametersInfo ( int uAction, int uParam, string lpvParam, int fuWinIni );
                        public static void SetWallpaper ( string path, Wallpaper.Style style )
                        {
                            SystemParametersInfo( SetDesktopWallpaper, 0, path, UpdateIniFile | SendWinIniChange );
                            RegistryKey key = Registry.CurrentUser.OpenSubKey( "Control Panel\\Desktop", true );
                            switch( style )
                            {
                                case Style.Tile :
                                key.SetValue( @"WallpaperStyle", "0" ) ;
                                key.SetValue( @"TileWallpaper", "1" ) ;
                                break;
                                case Style.Center :
                                key.SetValue( @"WallpaperStyle", "0" ) ;
                                key.SetValue( @"TileWallpaper", "0" ) ;
                                break;
                                case Style.Stretch :
                                key.SetValue( @"WallpaperStyle", "2" ) ;
                                key.SetValue( @"TileWallpaper", "0" ) ;
                                break;
                                case Style.Fill :
                                key.SetValue( @"WallpaperStyle", "10" ) ;
                                key.SetValue( @"TileWallpaper", "0" ) ;
                                break;
                                case Style.Fit :
                                key.SetValue( @"WallpaperStyle", "6" ) ;
                                key.SetValue( @"TileWallpaper", "0" ) ;
                                break;
                                case Style.Span :
                                key.SetValue( @"WallpaperStyle", "22" ) ;
                                key.SetValue( @"TileWallpaper", "0" ) ;
                                break;
                                case Style.NoChange :
                                break;
                            }
                            key.Close();
                        }
                    }
                }
"@
        } catch {}

        $StyleNum = @{
            Tile = 0
            Center = 1
            Stretch = 2
            Fill = 3
            Fit = 4
            Span = 5
        }
    }

    process {
        [Wallpaper.Setter]::SetWallpaper($Path, $StyleNum[$Style])
    }
}

Set-WallPaper -Path 'c:\path\to\wallpaper.jpg' -Style Fill

I tried changing it from a png to bmp image, didn't work - went back to png in case it just was a fluke, wasn't. Wallpaper is still black. VSCode isn't giving me any errors - it believes tha tthe code should run just fine.

Thank you!

0

There are 0 best solutions below