我有六种不同分辨率的桌面背景图片(一张图片),我想用不同的显示器和video卡以及其他不同的计算机来部署。 笔记本电脑,上网本,台式机,宽屏,甚至一些“高”屏幕。 我有图像来涵盖大部分情况。
我希望Windows 7通过组策略正确select正确的桌面背景图像。
现在,login屏幕已经完成。 OEMBackground方法相当聪明,可以将不同分辨率的文件复制到机器上,login应用程序将计算出显示器的宽高比,并尽可能将其与文件进行匹配。
有没有办法在桌面背景上具有该function?
嗯。 如果幸运的话,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 #[email protected]) ## 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 /调用user32.dll设置壁纸,这可能意味着VB脚本可能无法完成此操作。
尽pipe可能需要注销/login才能生效,但这样做要简单得多,
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筛选器的结果设置不同的壁纸。 因此,例如,您可以将所有可变大小的壁纸托pipe在networking共享上,也可以使用组策略预先login每个客户端上的所有壁纸。 然后,为每个不同大小的壁纸制作一个GPO,并将WMIfilter设置为仅在Win32_DesktopMonitor.ScreenWidth = 1920时应用,依此类推。