BGInfo Desktophintergrund bei dynamischer Bildschirmauflösung
BGInfo ist toll, aber wenn man es im Unternehmensnetzwerk einsetzen will, stolpert man schnell über die Problematik mit Desktophintergrundbildern. Kurz erklärt: es soll im Firmennetzwerk für alle Rechner ein schöner Desktophintergrund mit Firmenlogo und den BGInfo-Daten erstellt und verteilt werden. Viele Monitore haben aber eine unterschiedliche Auflösung, was dazu führt, dass ein Hintergrundbild mit einer angenommenen Auflösung von 1920x1080 auf einem Bildschirm mit 1280x1024 "verzogen" aussieht. Es muss also die Hintergrundgrafik angepasst werden.
Um dieses Problem zu lösen, kann man wie folgt vorgehen.
Inhaltsverzeichnis
Vorab-Informationen[Bearbeiten]
Lade zunächst BGInfo herunter: https://technet.microsoft.com/de-de/sysinternals/bginfo.aspx
Kopiere die BGInfo am Domain Controller ins Netlogon-Share, am Besten in einen Unterordner BGInfo. Hier werden auch die 2 Script-Dateien bginfo_install.bat und bginfo_run.vbs sowie im Unterordner background die Hintergrundbilder abgelegt.
BGInfo-Konfiguration[Bearbeiten]
Erstelle zunächst mit Hilfe von BGInfo.exe eine *.bgi-Konfigurationsdatei, etwa die bginfo_user.bgi mit folgenden Daten:
Host Name: <Host Name> Domain: <Machine Domain> Logged in as: <User Name> Serial Number: <WMISerialNumber> IP Address(es): <WMIIPAddress>
Schriftart: Segoe UI, Größe 9
Der Hintergrund ist wie folgt definiert:
Die Positionierung ist wichtig:
Im Bereich Desktops ist hinterlegt:
Hintergrundgrafiken erstellen[Bearbeiten]
Ermittle, welche Auflösungen die Monitore in deinem Netzwerk haben, erstelle für jede Auflösung ein entsprechendes, passendes Hintergrundbild und speichere diese im eingangs erwähnten Unterordner background des Netlogon-Shares ab. Das sieht dann in etwa so aus:
Der Dateiname muss immer mit der Auflösung im Format wallpaper_<width>_<height>.jpg enden, beachte das bginfo_run.vbs-Script!
Install-Script bginfo_install.bat[Bearbeiten]
Erstelle im Ordner, wo die Bginfo.exe und der Ordner background mit den Hintergrundgrafike liegen (z. B. \\domaincontroller\netlogon\bginfo\), ein Install-Script mit dem Namen bginfo_install.bat und folgendem Inhalt:
@echo off
CLS
IF NOT EXIST C:\BGInfo GOTO MakeDirectory
IF NOT EXIST C:\BGInfo\bginfo.exe GOTO CopyFiles
GOTO Run
:MakeDirectory
echo Make directory
mkdir C:\BGInfo
mkdir C:\BGInfo\background
mkdir %windir%\system32\oobe\info\backgrounds\
:CopyFiles
xcopy /Y \\domaincontroller\netlogon\bginfo\bginfo*.* c:\BGInfo\
xcopy /Y \\domaincontroller\netlogon\bginfo\background\*.* c:\BGInfo\background\
copy /Y \\domaincontroller\netlogon\bginfo\background\logon_1920_1080.jpg %windir%\system32\oobe\info\backgrounds\backgroundDefault.jpg
echo Registry modifications
reg add "HKCU\Control Panel\Desktop" /v Wallpaper /f /t REG_SZ /d c:\bginfo\wallpaper.jpg
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "C:\BGInfo\Bginfo.exe" /f /t REG_SZ /d "~ HIGHDPIAWARE"
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\Personalization" /v "LockScreenImage" /f /t REG_SZ /d "C:\BGInfo\logon.jpg"
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background" /v "OEMBackground" /t REG_DWORD /d 1 /f
REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" /v BgInfo /t REG_SZ /d "c:\BGInfo\bginfo_run.vbs" /f
:Run
echo Executing BGInfo ...
C:\BGInfo\bginfo_run.vbs
exit
Dieses Script kopiert alle BGInfo- und Grafikdateien aus dem Netlogon-Share des DC's auf den lokalen Client-PC. Auch werden diverse Registry-Einträge gesetzt. Im Speziellen muss der Eintrag
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "C:\BGInfo\Bginfo.exe" /f /t REG_SZ /d "~ HIGHDPIAWARE"
erwähnt werden. Wird dieser nicht gesetzt, funktioniert BGInfo ab Windows 8 nicht mehr sauber, die Hintergrundgrafik wird nicht gestreckt dargestellt.
Die Einträge
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\Personalization" /v "LockScreenImage" /f /t REG_SZ /d "C:\BGInfo\logon_maf.jpg"
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background" /v "OEMBackground" /t REG_DWORD /d 1 /f
setzen für Windows 8/10 bzw. Windows 7 den Hintergrund für den Anmeldebildschirm. Bei Windows 7 muss die Grafik zudem nach
copy /Y \\domaincontroller\netlogon\bginfo\background\logon_1920_1080.jpg %windir%\system32\oobe\info\backgrounds\backgroundDefault.jpg
kopiert werden. Hinweis: es spielt keine Rolle, wie groß die Grafik ist, da Windows diese immer korrekt streckt. Daher sollte eine hohe Auflösung (Full HD) gewählt werden. Bei Windows 10 liegt die Grafik unter
C:\BGInfo\logon.jpg
und wird vom Script bginfo_run.vbs (siehe unten) anhand der Monitorauflösung bei jedem Login des Users entsprechend aus C:\BGInfo\background\ kopiert.
Wichtig: das Install-Script muss "Als Administrator" und mit deaktivierter Benutzerkontensteuerung aufgerufen werden!
Das Script ruft nach Abschluss der Installation bginfo_run.vbs auf.
Initialisierungs-Script bginfo_run.vbs[Bearbeiten]
Bei jeder Anmeldung wird nach der Installation das Script bginfo_run.vbs ausgeführt. Dieses ermittelt die Monitorauflösung und legt die passende Hintergrundgarfik fest:
On Error Resume next
Dim WshShell, oFSO, strScreenWidth, strScreenHeight
Dim oWMIService, colItems, objItem
Dim BginfoDir, BginfoWallpaper, BginfoLogonImg
Set WshShell = CreateObject("WScript.Shell" )
Set oFSO = CreateObject("Scripting.FileSystemObject")
BginfoDir = "C:\Bginfo\"
' Get latest Bginfo config and background images from available domain controller
If NetlogonAvailable("<fqdn-domain>") And oFSO.FolderExists(BginfoDir) Then
oFSO.CopyFolder "\\domaincontroller\netlogon\bginfo\background", BginfoDir & "background", True
oFSO.CopyFile "\\domaincontroller\netlogon\bginfo\bginfo_user.bgi", BginfoDir, True
End If
' Get screen resolution to generate/copy optimal background image
Set oWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colItems = oWMIService.ExecQuery("Select * from Win32_VideoController",,48)
strScreenWidth = 0
strScreenHeight = 0
For Each objItem in colItems
If objItem.ScreenWidth > strScreenWidth Then
strScreenWidth = objItem.CurrentHorizontalResolution
strScreenHeight = objItem.CurrentVerticalResolution
End If
Next
If strScreenWidth = 0 Then
Set colItems = oWMIService.ExecQuery("Select * from Win32_DesktopMonitor",,48)
strScreenWidth = 0
strScreenHeight = 0
For Each objItem in colItems
If objItem.ScreenWidth > strScreenWidth Then
strScreenWidth = objItem.ScreenWidth
strScreenHeight = objItem.ScreenHeight
End If
Next
End If
' For unknown screen resolution use the Full HD image
If strScreenWidth = 0 Then
strScreenWidth = 1920
strScreenHeight = 1080
End If
BginfoWallpaper = BginfoDir & "\background\" & "wallpaper_" & strScreenWidth & "_" & strScreenHeight & ".jpg"
BginfoLogonImg = BginfoDir & "\background\" & "logon_" & strScreenWidth & "_" & strScreenHeight & ".jpg"
' If optimal image not exists we use the Full HD image instead
If oFSO.FileExists(BginfoWallpaper) = False Then
BginfoWallpaper = BginfoDir & "\background\" & "wallpaper_1920_1080.jpg"
BginfoLogonImg = BginfoDir & "\background\" & "logon_1920_1080.jpg"
End If
oFSO.CopyFile BginfoWallpaper, BginfoDir & "\wallpaper.jpg", True
oFSO.CopyFile BginfoLogonImg, BginfoDir & "\logon.jpg", True
' Add reg keys to set accent color (for Windows 10 only)
WshShell.RegWrite "HKCU\SOFTWARE\Microsoft\Windows\DWM\Composition", 1, "REG_DWORD"
WshShell.RegWrite "HKCU\SOFTWARE\Microsoft\Windows\DWM\ColorizationColor", &hc42d7d9a, "REG_DWORD"
WshShell.RegWrite "HKCU\SOFTWARE\Microsoft\Windows\DWM\ColorizationColorBalance", 59, "REG_DWORD"
WshShell.RegWrite "HKCU\SOFTWARE\Microsoft\Windows\DWM\ColorizationAfterglow", &hc42d7d9a, "REG_DWORD"
WshShell.RegWrite "HKCU\SOFTWARE\Microsoft\Windows\DWM\ColorizationAfterglowBalance", 10, "REG_DWORD"
WshShell.RegWrite "HKCU\SOFTWARE\Microsoft\Windows\DWM\ColorizationBlurBalance", 1, "REG_DWORD"
WshShell.RegWrite "HKCU\SOFTWARE\Microsoft\Windows\DWM\EnableWindowColorization", 1, "REG_DWORD"
WshShell.RegWrite "HKCU\SOFTWARE\Microsoft\Windows\DWM\ColorizationGlassAttribute", 1, "REG_DWORD"
WshShell.RegWrite "HKCU\SOFTWARE\Microsoft\Windows\DWM\AccentColor", &hff9a7d2d, "REG_DWORD"
WshShell.RegWrite "HKCU\SOFTWARE\Microsoft\Windows\DWM\ColorPrevalence", 0, "REG_DWORD"
WshShell.RegWrite "HKCU\SOFTWARE\Microsoft\Windows\DWM\EnableAeroPeek", 1, "REG_DWORD"
WshShell.RegWrite "HKCU\SOFTWARE\Microsoft\Windows\DWM\AlwaysHibernateThumbnails", 0, "REG_DWORD"
WshShell.RegWrite "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Accent\StartColorMenu", &hff735d21, "REG_DWORD"
WshShell.RegWrite "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Accent\AccentColorMenu", &hff9a7d2d, "REG_DWORD"
WshShell.Run "cmd /C reg add ""HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Accent"" /v AccentPalette /t REG_BINARY /d a4e8ff007cd6f5004daccf002d7d9a00215d73000e4357000b28330000cc6a00 /f", 0, True
' Set Bginfo wallpaper
WshShell.Run "C:\BGInfo\bginfo.exe C:\BGInfo\bginfo_user.bgi /accepteula /timer:0 /silent", 0
' ================================
' Functions
' ================================
Function NetlogonAvailable(strFQDN)
Dim oFSO
Set oFSO = CreateObject("Scripting.FileSystemObject")
NetlogonAvailable = oFSO.FolderExists("\\" & strFQDN & "\netlogon")
End Function
Das Script prüft zunächst, ob eine Verbindung zum DC besteht. Falls ja, kopiert es die aktuellen Grafiken aus dem background-Ordner nach C:\BGInfo\background. Dann wird die aktuelle Monitorauflösung ermittelt und aus dem Unterordner C:\BGInfo\background\ werden die entsprechenden Grafiken für Desktophintergrund und Anmeldebildschirm kopiert. Sollte kein Wert für die Auflösung ermittelt werden können oder es zur Auflösung keine Grafik im Ordner C:\BGInfo\background\ geben, werden immer die zwei Dateien
wallpaper_1920_1080.jpg logon_1920_1080.jpg
nach C:\BGInfo\ kopiert - diese müssen also auf alle Fälle existieren! Die Dateien werden in jedem Fall umbenannt in
wallpaper.jpg logon.jpg
Die entsprechenden Registry-Werte, welche oben bei der Installation eingetragen wurden, verweisen nämlich auf diese beiden Dateien. Der Registry-Wert lässt sich - da er in HKLM liegt - durch einen "normalen" User nicht ändern (Read-Only!!!), deshalb der Umweg über das Kopieren und Umbenennen der entsprechenden Garfikfiles.
Die vielen REG ADD-Befehle legen unter Windows 10 die Akzentfarbe fest. Dies muss je User eingestellt werden und passt ideal zur CI-Farbe. Wer nicht möchte, dass diese Farben verändert werden, kann das Script entsprechend anpassen.
Schlusswort[Bearbeiten]
Zusammengefasst: es müssen je Monitorauflösung entsprechende Grafiken erstellt werden. Mittels VB-Script wird dann beim Anmelden des jeweiligen Users die passende Grafik für Desktophintergrund und Anmeldebildschirm ermittelt. So wird gewährleistet, dass bei einem Notebook auch immer die korrekten Hintergründe angezeigt werden, egal sich das Gerät in einer Docking Station mit angeschlossenen Monitoren mit anderer Auflösung als die Notebookauflösung befinden.