windows 快捷键更改壁纸
简介:通过 powershell,实现 windows 快捷键修改壁纸
起因:在 Windows 系统中,使用内置的幻灯片放映功能自动切换桌面壁纸时,无法直接通过快捷键或按钮手动切换到下一张壁纸。(一番搜索无果,有大佬知道的话烦请告知,感谢感谢)
网络搜索有说右键有“下一个桌面背景”,但是很遗憾我桌面右键没有
询问 Deepseek 给了一些第三方工具,但是环境原因公司电脑无法安装。决定自己动手
BioniX Wallpaper 支持快捷键切换壁纸(如 Ctrl + 方向键)。 官网:https://www.bionixwallpaper.com/ DisplayFusion 功能强大的桌面管理工具,支持壁纸轮播和自定义快捷键。 官网:https://www.displayfusion.com/ Wallpaper Engine(Steam平台) 支持动态壁纸和手动切换,需付费购买但功能丰富。 Steam商店页:Wallpaper Engine
本来是打算 ai 写完自己改改,能用就行的,但是 ai 写出来全是报错...
为避免重复造轮子我上 github 上找了一个
本篇实现不同之处:
-
修改图片设置逻辑,由图片移动到新文件夹,更改为在指定目录循环切换。
-
省略了 windows 定时任务部分(我只想要快捷键切换功能,对定时切换有需求的可以点进去照着设置一下)
-
增加快捷键部分
操作步骤
1 新建 "Set-RandomWallpaper.ps1"记事本打开复制以下内容
注意修改自身存放图片的目录($bg_dir)允许的图片后缀($extList)
以及想要的填充方式(修改这行代码“Set-WallPaper -Image $imagePath -Style Fill“,具体见注释)
# 背景图片所在目录。建议英文,中文的话可能因为编码原因乱码,报目录不存在
$bg_dir= "E:\wallpaper"
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
#>
param (
[parameter(Mandatory=$True)]
# Provide path to image
[string]$Image,
# Provide wallpaper style that you would like applied
#填充方式,对应背景设置界面的6种填充方式
<#
Fill:填充方式,拉伸图片以填满整个桌面,同时保持图片的宽高比例。
Fit:适应方式,缩小图片以适应桌面大小,同时保持图片的宽高比例。
Stretch:拉伸方式,拉伸图片以覆盖整个桌面,不考虑图片的宽高比例。
Tile:平铺方式,重复图片以覆盖整个桌面。
Center:居中方式,将图片放置在桌面中央,不进行任何拉伸或平铺。
Span:跨屏方式,拉伸图片以覆盖多个显示器,同时保持图片的宽高比例。
#>
[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"}
}
# 设置WallpaperStyle,TileWallpaper
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)
}
Function Set-RandomWallpapper{
param (
[string] $bg_dir
)
# 允许的文件后缀
$extList= "*.jpg","*.jpeg","*.png"
$image = Get-ChildItem -Path $bg_dir -Name -Include $extList |
Get-Random -Count 1
$imagePath = "$bg_dir\$image"
#在这里更改想要的填充方式
Set-WallPaper -Image $imagePath -Style Fill
}
Set-RandomWallpapper -bg_dir $bg_dir
此时就可以通过windows Powershell 修改壁纸了
搜索windows Powershell 管理员打开,进入文件所在目录执行以下命令
powershell -ExecutionPolicy Bypass -File .\Set-RandomWallpaper.ps1
2 设置快捷键
-
创建快捷方式:右键点击
Set-RandomWallpaper.ps1
文件,选择“创建快捷方式”。 -
设置快捷键:右键点击快捷方式,选择“属性”,在“快捷键”框中按下你想要设置的快捷键组合(如 Ctrl+Alt+Right)。
-
确保脚本可以运行:在“目标”框中,添加
powershell -ExecutionPolicy Bypass -File
前缀,确保 PowerShell 脚本可以正常运行。
运行方式选最小化,避免运行时弹出黑框
现在就可以通过 Ctrl+Alt+Right切换桌面壁纸了
存在的问题
会强行从幻灯片放映改为图片,也就是说不能周期自动切换了。只能手动切换,
可以用原项目中的 Windows 系统的【计划任务】解决该问题。但是本人不需要定时切换功能,所以没试过,不知道能不能用