-
Notifications
You must be signed in to change notification settings - Fork 0
/
win-change-background.ps1
132 lines (94 loc) · 3.55 KB
/
win-change-background.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
param (
[parameter(Mandatory=$True)]
[string]$Color,
[parameter(Mandatory=$True)]
# Provide path to image
[string]$Image
)
Function Set-WallPaperBackgroundColor {
<#
.SYNOPSIS
Applies a specified color to the current user's desktop.
.PARAMETER Color
Provide wallpaper color in HEX notation.
You can use a tool like https://colorpicker.me/ to pick a color of your choice.
.EXAMPLE
Set-WallPaperBackgroundColor -Color 000000
#>
param (
[parameter(Mandatory=$True)]
[string]$Color
)
Add-Type -TypeDefinition @"
using System;
using System.Runtime.InteropServices;
public class PInvoke
{
[DllImport(`"user32.dll`")]
public static extern bool SetSysColors(int cElements,
int[] lpaElements,
int[] lpaRgbValues);
}
"@
$BackgroundColor = "0x$Color"
[PInvoke]::SetSysColors(1, @(1), @($BackgroundColor))
}
Function Set-WallPaper {
<#
.SYNOPSIS
Applies a specified wallpaper to the current user's desktop.
.PARAMETER Image
Provide the exact path to the image.
.PARAMETER Style
Provide wallpaper style (Example: Fill, Fit, Stretch, Tile, Center, or Span).
.EXAMPLE
Set-WallPaper -Image "C:\Wallpaper\Default.jpg"
Set-WallPaper -Image "C:\Wallpaper\Background.jpg" -Style Fit
.SOURCE
https://www.joseespitia.com/2017/09/15/set-wallpaper-powershell-function/
#>
param (
[parameter(Mandatory=$True)]
# Provide path to image
[string]$Image,
# Provide wallpaper style that you would like applied
[parameter(Mandatory=$False)]
[ValidateSet('Fill', 'Fit', 'Stretch', 'Tile', 'Center', 'Span')]
[string]$Style
)
$WallpaperStyle = Switch ($Style) {
"Fill" {"10"}
"Fit" {"6"}
"Stretch" {"2"}
"Tile" {"0"}
"Center" {"0"}
"Span" {"22"}
}
If($Style -eq "Tile") {
New-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name WallpaperStyle -PropertyType String -Value $WallpaperStyle -Force
New-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name TileWallpaper -PropertyType String -Value 1 -Force
}
Else {
New-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name WallpaperStyle -PropertyType String -Value $WallpaperStyle -Force
New-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name TileWallpaper -PropertyType String -Value 0 -Force
}
Add-Type -TypeDefinition @"
using System;
using System.Runtime.InteropServices;
public class Params
{
[DllImport("User32.dll",CharSet=CharSet.Unicode)]
public static extern int SystemParametersInfo (Int32 uAction,
Int32 uParam,
String lpvParam,
Int32 fuWinIni);
}
"@
$SPI_SETDESKWALLPAPER = 0x0014
$UpdateIniFile = 0x01
$SendChangeEvent = 0x02
$fWinIni = $UpdateIniFile -bor $SendChangeEvent
$ret = [Params]::SystemParametersInfo($SPI_SETDESKWALLPAPER, 0, $Image, $fWinIni)
}
Set-WallPaperBackgroundColor -Color $Color
Set-WallPaper -Image "$Image" -Style Fit