Windows
使用正確解析度的背景桌面圖像
我有六種不同解析度的桌面背景圖像(圖片),我想將其部署到具有不同顯示器和影片卡之類的不同電腦集合中。筆記型電腦、上網本、台式機、寬屏,甚至是幾個“高”螢幕。我有圖像可以涵蓋大多數情況。
我希望 Windows 7 通過組策略正確選擇正確的桌面背景圖像。
現在,登錄螢幕已經完成。OEMBackground方法相當聰明,可以讓你將不同解析度的文件複製到機器上,登錄應用程序會計算顯示器的縱橫比並儘可能地匹配文件。
有沒有辦法在桌面背景上也有這個功能?
嗯。如果幸運的話,Win32_DesktopMonitor WMI 類的 ScreenHeight 和 ScreenWidth 屬性將在客戶端填寫,這意味著您可以輕鬆地使用 VB 腳本或 Powershell 腳本來確定電腦的桌面解析度。
Get-WMIObject Win32_DesktopMonitor
現在您知道電腦的解析度,您可以像這樣設置適當的桌面。以下腳本作者的學分在評論中:
#requires -version 2.0 ## Set-Wallpaper - set your windows desktop wallpaper ################################################################################################### ## Usage: ## Set-Wallpaper "C:\Users\Joel\Pictures\Wallpaper\Dual Monitor\mandolux-tiger.jpg" "Tile" ## ls *.jpg | get-random | Set-Wallpaper ## ls *.jpg | get-random | Set-Wallpaper -Style "Stretch" ################################################################################################### ## History: ## v0.5 First release (on #PowerShell@irc.freenode.net) ## v1.0 Public release (http://www.poshcode.org/488) ## - Added Style: Tile|Center|Stretch ## v1.1 This Release ## - Added "NoChange" style to just use the style setting already set ## - Made the Style parameter to the cmdlet optional ################################################################################################### add-type @" using System; using System.Runtime.InteropServices; using Microsoft.Win32; namespace Wallpaper { public enum Style : int { Tile, Center, Stretch, NoChange } public class Setter { public const int SetDesktopWallpaper = 20; public const int UpdateIniFile = 0x01; public const int SendWinIniChange = 0x02; [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] private static extern int SystemParametersInfo (int uAction, int uParam, string lpvParam, int fuWinIni); public static void SetWallpaper ( string path, Wallpaper.Style style ) { SystemParametersInfo( SetDesktopWallpaper, 0, path, UpdateIniFile | SendWinIniChange ); RegistryKey key = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop", true); switch( style ) { case Style.Stretch : key.SetValue(@"WallpaperStyle", "2") ; key.SetValue(@"TileWallpaper", "0") ; break; case Style.Center : key.SetValue(@"WallpaperStyle", "1") ; key.SetValue(@"TileWallpaper", "0") ; break; case Style.Tile : key.SetValue(@"WallpaperStyle", "1") ; key.SetValue(@"TileWallpaper", "1") ; break; case Style.NoChange : break; } key.Close(); } } } "@ cmdlet Set-Wallpaper { Param( [Parameter(Position=0, Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [Alias("FullName")] [string] $Path , [Parameter(Position=1, Mandatory=$false)] [Wallpaper.Style] $Style = "NoChange" ) [Wallpaper.Setter]::SetWallpaper( (Convert-Path $Path), $Style ) }
請注意,您必須 P/Invoke user32.dll 來設置牆紙,這可能意味著 VB 腳本可能無法完成此操作。
這是一種更短、更簡單的方法,儘管它可能需要註銷/登錄才能生效:
Function Set-WallPaper($Value) { Set-ItemProperty -path 'HKCU:\Control Panel\Desktop\' -name wallpaper -value $value rundll32.exe user32.dll, UpdatePerUserSystemParameters }
方法 2:此外,您可以在同一 WMI 類上使用 GPO WMI 過濾器,並根據該 WMI 過濾器的結果設置不同的桌面。因此,例如,您可以在網路共享上託管所有可變大小的桌面,或者您可以使用組策略在每個客戶端上預留所有桌面。然後,為每種不同尺寸的桌面製作一個 GPO,並將其上的 WMI 過濾器設置為僅在 Win32_DesktopMonitor.ScreenWidth = 1920 時應用,依此類推。