【问题标题】:How to change the desktop background with Powershell consistently如何使用 Powershell 一致地更改桌面背景
【发布时间】:2020-04-22 20:09:54
【问题描述】:

我正在尝试使用 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 上始终如一地工作的任何想法?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    您可以尝试使用 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 2015-10-04
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多