我可能会更改Windows 10的个性化设置, 例如背景图片,
通过RegEdit手动更改正确的注册表项,或者使用具有适当参数的Powershell命令“New-ItemPropery”更改正确的注册表项。 我的经验:注册表中的新个性化设置 - 我可以使用RegEdit检查所有内容是否已正确更改 - 在下次Windows重新启动或Windows用户注销+登录后才会激活。 顺便说一句,我使用免费工具“WhatChanged”来检测个性化设置中的简单更改后注册表更改。 所以我能够以当前Windows登出+登录的价格更改背景图像。
但是,如果我对Windows 10的图形配置工具执行相同操作,在鼠标右键单击后选择“个性化”执行,个性化设置中的更改会立即生效,即背景图片会立即更改。
问题:
是否有免费工具或更好的PowerShell功能(调用)或任何其他免费解决方案,我立即激活了Windows个性化(和Windows桌面)设置的更改?
我正在使用Windows10,但当然也欢迎适用于Win95,Win98,W2k,WInXP,WIn7的解决方案...
原因: 为了提高开发速度,我希望在我对注册表进行更改时立即“看到”,即Windows个性化,但通常也用于第三方软件。
根据我的经验,对于其他第三方软件来说,如果注册表设置只是在程序启动时读取一次,那么注册表更改将在重新启动软件后才会激活,这是很正常的。但即便如此,我也不能为此进行Windows注销+登录......
此致 罗尔夫
答案 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