Windows Spotlight als Benutzerhintergrundbild

Mit Windows 10 ist es möglich geworden, den Sperrbildschirmhintergrund automatisch ändern zu lassen. Hierzu muss lediglich in den Einstellungen beim Sperrbildschirm der Hintergrund auf Windows-Blickpunkt oder in Englisch auf Windows-Spotlight gesetzt werden. Leider gibt es keine Möglichkeit diese Bilder auch als Hintergrund für den Benutzer einzustellen. Es gibt Programme die dies tun, jedoch wollte ich eine schlanke Lösung um den Hintergrund passend zum Sperrbildschirm einzutellen.


Somit habe ich mich in die Welt von Powershell begeben um ein kleines Skript zu erstellen, welches genau dies tut. Hierzu musste ich erstmal alle benötigten Informationen suchen:

Speicherort der Bilder für Windows-Spotlight

Windows speicher alle Bilder für Spotlight in einem Ordner:
%localappdata%\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets 
(das %localappdata% steht für den Benutzerordner).


Die Namen der Dateien sind Hexadezimal und ohne Dateiendung. Jedoch braucht man nur .jpg ergänzen, damit die Bilder sichtbar werden. Dennoch ist es so nicht möglich zu erkennen, welches Bild gerade als Sperrbildschirm benutzt wird.

Regestrierungseditor

Im Regestrierungseditor wird unter dem Pfad:
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Creative
für jedes Benutzerkonto ein eigener Ordner angelegt, indem wiederum für jedes Bild ein eigener Ordner angelegt wird. Nach einigem Testen fand ich heraus, dass der aktuelle Sperrbildschirmhintergund meist der letzte Eintrag ist. Guckt man nun in den letzten Ordner, findet man dort einen Schlüssel mit dem Namen „landscapeimage“. Der Wert des Schlüssels ist der Pfad zum Bild im Spotlight Ordner.

Somit habe ich jetzt alle Informationen die ich brauche für das Skript.


Powershell

Das Skript setzt sich aus mehreren Teilen zusammen:

1. Temppfad

Ich erstelle mir einen Ordner, indem das Bild zwischengespeichert wird. Damit das auf jedem System funktioniert, prüfe ich mit Test-Path ob der Ordner existiert, wenn nicht, wird er erstellt.

1
2
3
4
 $savepath = "C:\Temp\Spotlight"
if ((Test-Path $savepath) -eq $false){
md -Path $savepath 
}

2. Benutzerüberprüfung

Dadurch, dass es mehrere Benutzerkonten auf dem PC geben könnte, müssen alle Pfade auf den aktuellen Benutzer geprüft werden, damit für den aktuellen Benutzer das passende Bild eingestellt wird.
Dies erreiche ich indem ich die Itemproperty von landscapeimage überprüfe ob der aktuelle benutzerpfad $env:USERPROFILE enthalten ist.

5
6
7
8
9
10
11
12
 $folders = Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Creative" -name
foreach ($name in $folders){
   $path = Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Creative\$name\" -Name |Select-Object -Last 1
   $Itemnew = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Creative\$name\$path" -ErrorAction SilentlyContinue).landscapeImage
 
 
   if ($Itemnew.Contains($env:USERPROFILE)){}
}

3. Hintergundbild setzen

In das if kommt nun die Anweisung, was das Skript eigentlich tun soll: Das Hintergrundbild ändern. Hierzu führe ich folgende Schritte aus:

  1. Den Temp Ordner leeren
  2. Die neue Datei dort hin kopieren
  3. Die neue Datei umbennen, damit sie ein Bild ist
  4. Das neue Bild als Hintergrund im Regestrierungseditor setzen
  5. user32.dll updaten, damit das neue Bild als Hintergrund sichtbar wird
11
12
13
14
15
16
17
18
19
20
Get-ChildItem $savepath |del #Delte old picture
 
Copy-Item $Itemnew $savepath #Copy new picture
 
Get-ChildItem $savepath | Rename-Item -NewName Spotlight-Export.jpg -Force #Rename new picture
 
$Wallpaper = (Get-ChildItem $savepath).FullName #Set new picture as wallpaper
Set-ItemProperty -path 'HKCU:\Control Panel\Desktop\' -name wallpaper -value $Wallpaper
 
rundll32.exe user32.dll, UpdatePerUserSystemParameters #Update parameters

Das Skript ist nun abhängig von dem Benutzer der es ausführt, somit ist es universell benutzbar. Es kommen bei der Ausführung zwei Fehler bei mir auf, da es zwei Ordner im Regestrierungseditor gibt, die keine Daten dazu enthalten. Die Fehlermeldungen kriege ich aber leider nicht aus der Ausgabe heraus, sie haben aber keine Auswirkung auf die Funktionalität.

Aufgabenplanung

Nun habe ich das Skript mithilfe der Aufgabenplanung automatisiert, indem es ausgeführt wird, sobald der Computer entsperrt wird. Wichtig ist hierbei, dass es von dem Benutzerkonto ausgeführt wird, was den Hintergrund bekommen soll, da das Skript abhängig vom Benutzerkonto ist.


Das ist meine schlanke Lösung um den Hintergrund schnell und effizient zu ändern. Das Skript sowie die Aufgabe könnt ihr hier runterladen.

Download

Schreibe einen Kommentar

Jonas Hagendorf

Ich bin Jonas Hagendorf, 19 Jahre alt. Zurzeit gehe ich in die 13. Klasse einer Gesamtschule und mache dort mein Abitur.Mein Ziel ist nach dem Abitur ist eine Ausbildung zum Fachinformatiker für Systemintegration zu machen und wenn möglich anschließend IT zu studieren. Über mich: https://blog.jonashagendorf.de/about-me/