BGInfo Desktophintergrund bei dynamischer Bildschirmauflösung

Aus ITwiki
Version vom 10. Juli 2017, 16:00 Uhr von Flo84 (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „BGInfo ist toll, aber wenn man es im Unternehmensnetzwerk einsetzen will, stolpert man schnell über die Problematik mit Desktophintergrundbildern. Kurz erklä…“)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

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.

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:

Bginfodyn01.jpg

Die Positionierung ist wichtig:

Bginfodyn02.jpg

Im Bereich Desktops ist hinterlegt:

Bginfodyn03.jpg

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:

Bginfodyn04.jpg

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.

War dieser Beitrag Hilfreich?
Bitte stimme unten ab.
11
8
5
Es wurden seit Erstellung der Umfrage am 15:28, 11. Jul. 2017 24 Stimmen abgegeben.
poll-id 8923C62F6E4A18176A602D8B7B1864B4