Windows 10:如何通过PowerShell立即激活新的个性化设置?

时间:2016-09-14 16:39:21

标签: windows powershell desktop

我可能会更改Windows 10的个性化设置, 例如背景图片,

通过RegEdit手动更改正确的注册表项,或者使用具有适当参数的Powershell命令“New-ItemPropery”更改正确的注册表项。 我的经验:注册表中的新个性化设置 - 我可以使用RegEdit检查所有内容是否已正确更改 - 在下次Windows重新启动或Windows用户注销+登录后才会激活。 顺便说一句,我使用免费工具“WhatChanged”来检测个性化设置中的简单更改后注册表更改。 所以我能够以当前Windows登出+登录的价格更改背景图像。

但是,如果我对Windows 10的图形配置工具执行相同操作,在鼠标右键单击后选择“个性化”执行,个性化设置中的更改会立即生效,即背景图片会立即更改。

问题:

是否有免费工具或更好的PowerShell功能(调用)或任何其他免费解决方案,我立即激活了Windows个性化(和Windows桌面)设置的更改?

我正在使用Windows10,但当然也欢迎适用于Win95,Win98,W2k,WInXP,WIn7的解决方案...

原因: 为了提高开发速度,我希望在我对注册表进行更改时立即“看到”,即Windows个性化,但通常也用于第三方软件。

根据我的经验,对于其他第三方软件来说,如果注册表设置只是在程序启动时读取一次,那么注册表更改将在重新启动软件后才会激活,这是很正常的。但即便如此,我也不能为此进行Windows注销+登录......

此致 罗尔夫

1 个答案:

答案 0 :(得分:2)

要应用桌面更改,您需要从user32.dll调用Win32 API SystemParametersInfo

虽然您无法直接从PowerShell调用本机Win32 API,但您可以通过System.Runtime.InteropServices从C#调用它,并且可以将C#程序集导入PowerShell。以下PowerShell代码创建一个C#程序集以调用SystemParametersInfo

Add-Type @"
namespace Wallpaper {
    public class Setter {
        public const int SetDesktopWallpaper = 20;
        public const int UpdateIniFile = 0x01;
        public const int SendWinIniChange = 0x02;

        [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
        private static extern int SystemParametersInfo (int uAction, int uParam, string lpvParam, int fuWinIni);

        public static void SetWallpaperFile ( string path ) {
            SystemParametersInfo( SetDesktopWallpaper, 0, path, UpdateIniFile | SendWinIniChange );
        }
    }
}
"@ 

function Set-Wallpaper {
    param([Parameter(Mandatory=$true)]$Path)

    [Wallpaper.Setter]::SetWallpaperFile( $Path )
}

如果需要更改显示样式,请在调用SetWallpaperFile之前更新相应的注册表项。例如,要将壁纸样式设置为“中心”:

Set-ItemProperty -Path 'HKCU:\Control Panel\Desktop' -Name 'WallpaperStyle' -Value '1'
Set-ItemProperty -Path 'HKCU:\Control Panel\Desktop' -Name 'TileWallpaper' -Value '0'

可以类似地更改桌面墙纸以外的设置。请参阅SystemParametersInfo的文档。

代码最初改编自http://poshcode.org/491