用 PowerShell 更换 Windows 桌面壁纸

没有 Set-Wallpaper 这样的 cmdlet,但通过一个很小的 SystemParametersInfo P/Invoke 就能原生实现——所有“设置壁纸”脚本背后都是这个被遗忘的 Win32 调用。

Windows桌面媒体PowerShell低风险
先运行 Add-Type 的 P/Invoke 片段,再调用 `[Win32.W]::SystemParametersInfo(20, 0, '<图片路径>', 3)` 立即生效。

01命令

命令
$ Add-Type -TypeDefinition 'using System;using System.Runtime.InteropServices;public class W{[DllImport("user32.dll",SetLastError=true)]public static extern bool SystemParametersInfo(int uAction,int uParam,string lpvParam,int fuWinIni);}' -Name W -Namespace Win32; [Win32.W]::SystemParametersInfo(20, 0, 'C:\Pictures\bg.jpg', 3)

02作用说明

20 是 SPI_SETDESKWALLPAPER,3 是 SPIF_UPDATEINIFILE 与 SPIF_SENDCHANGE 的组合——既写入设置又广播通知,桌面立刻刷新。因为是 P/Invoke,命令比普通 cmdlet 长,但零依赖,Windows PowerShell 和 PowerShell 7 都能用。部分图片格式(如 HEIC)会被拒绝,先转成 JPG/PNG;壁纸的“适应方式”仍保持用户在设置里选择的效果。

03风险

风险低风险
使用条件Returns True on success; the image should be a format Windows wallpapers accept (JPG/PNG/BMP). Change takes effect immediately.

04撤销

✓无需撤销——该命令不会改变持久状态。

05来源

最后验证: 2026-09-17 · 分类: 媒体

06相关方案