【问题标题】:Windows 10: How to make new Personalisation settings active immediately, by PowerShell?Windows 10:如何通过 PowerShell 立即激活新的个性化设置?
【发布时间】:2016-09-14 16:39:21
【问题描述】:

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

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

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

问题:


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


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

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

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

真诚的 罗尔夫

【问题讨论】:

    标签: windows powershell desktop


    【解决方案1】:

    要应用桌面更改,您需要从 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

    【讨论】:

      猜你喜欢
      • 2018-06-20
      • 2019-01-13
      • 2020-08-12
      • 1970-01-01
      • 2016-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多