2016-09-14 45 views
1

我可以更改Windows 10, 的個性化設置,例如背景照片Windows 10:如何通過PowerShell立即激活新的個性化設置?

通過使用RegEdit手動更改正確的註冊表項或使用具有適當參數的Powershell命令「New-ItemPropery」更改正確的註冊表項。 我的經驗:註冊表中的新個性化設置 - 我可以檢查與RegEdit,所有已正確更改 - 只是在下次Windows重新啓動或Windows用戶註銷+登錄後激活。 順便說一句,我正在使用免費工具「WhatChanged」來檢測個性化設置中簡單更改後的註冊表更改。 因此,我可以改變背景圖片,以當前Windows註銷+登錄的價格。但是,如果我通過在鼠標右鍵後選擇「個性化」來執行Windows 10的圖形化配置工具,則個性化設置中的更改立即生效,即背景圖片立即變化。

問:


有一個免費的工具,甚至更好的PowerShell功能(通話)或任何其他免費的解決方案,由我獲得Windows個性化(和Windows桌面)設置的變化激活,立即?


我使用Windows10,當然解決方案,爲的Win95,Win98下,W2K,WINXP,Win7的歡迎工作過......

原因: 爲了提高開發速度,我想當我對註冊表進行更改(即Windows個性化)時立即「看到」,但通常也用於第三方軟件。

根據我的經驗,對於其他第三方軟件來說,如果註冊表設置在程序開始時只讀過一次,註冊表更改將在軟件重新啓動後纔會激活。但是我即使是這樣,我不能做一個Windows註銷+登錄爲...

真誠 羅爾夫

回答

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