powershell - 如何使用 Powershell 一致地更改桌面背景
问题描述
我正在尝试使用 Powershell 更改桌面背景。我一直在尝试使用以下仅在某些时候有效的代码。
Remove-ItemProperty -path "HKCU:\Control Panel\Desktop" -name WallPaper -Force
Set-ItemProperty -path 'HKCU:\Control Panel\Desktop\' -name Wallpaper -value $wallpaper -Force
RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters ,1 ,True
我已经尝试了这个代码的许多其他变体,例如使用 Start-Sleep 添加延迟或使用 Start-Job {RUNDLL32.EXE ...} 然后使用 Wait-Job。
我猜想尝试使用 RUNDLL32.exe 有点奇怪。我正在使用 Powershell V5 运行 Windows 7 32 位。
奇怪的旁注,我在同一台计算机上的 Powershell V6 中运行相同的代码,并且代码每次都能完美运行。关于为什么会这样以及我如何能够让它在 Powershell V5 上始终如一地工作的任何想法?
解决方案
您可以尝试使用user32.dll的SystemParametersInfo函数,如下所示:
Add-Type -TypeDefinition @'
using System.Runtime.InteropServices;
public class Wallpaper {
public const uint SPI_SETDESKWALLPAPER = 0x0014;
public const uint SPIF_UPDATEINIFILE = 0x01;
public const uint SPIF_SENDWININICHANGE = 0x02;
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern int SystemParametersInfo (uint uAction, uint uParam, string lpvParam, uint fuWinIni);
public static void SetWallpaper (string path) {
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, path, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);
}
}
'@
$wallpaper = 'X:\pictures\mywallpaper.jpg' # absolute path to the image file
[Wallpaper]::SetWallpaper($wallpaper)
推荐阅读
- javascript - React Native:TypeError:未定义不是对象(评估'_this.props.data.map')
- php - while循环中的特定变量
- angular - 如何在 Angular 7 中打开引导模式表单,并将按钮名称放在表单的输入框中
- sql - 2个逗号分隔字符串的Oracle SQL交集
- math - 如何为任何给定的 RGB 背光颜色找到完美的文本颜色
- sql-server - 需要使用 SQL 字符串变量中的函数计算秒的总和
- reactjs - 如何使用已删除的图像 ID 编写数组?
- oracle - 我想在国家/地区选择其 CNIC 格式时执行 CNIC 格式,将根据他们的国家/地区格式在 oralce apex.help 我?
- python - pyspark withcolumn 在每行中插入列表
- python - 从web.py返回响应后如何运行后台功能