Desktophintergrund (Wallpaper) mit Powerscript ändern

Fundstelle: c-nergy.be/blog/?p=1529 https://c-nergy.be/blog/?p=15291
Code:
#-------------------------------------------------------------------#
# ScriptName : SetWall.ps1                                          #
# Description : Force a Desktop wallpaper Refresh                   #
# Credits  : Unknown (if you know original creator, let us know)    #
#                                                                   #
# Date : 01 July 2020                                               #
# https://c-nergy.be/blog/?p=15291                                  #
# how to refresh desktop background image                           #
#-------------------------------------------------------------------#
#Modify Path to the picture accordingly to reflect your infrastructure
$imgPath="\\Domain.lab\netlogon\Wallpaper.png"
$code = @'
using System.Runtime.InteropServices;
namespace Win32{
 
     public class Wallpaper{
        [DllImport("user32.dll", CharSet=CharSet.Auto)]
         static extern int SystemParametersInfo (int uAction , int uParam , string lpvParam , int fuWinIni) ;
     
         public static void SetWallpaper(string thePath){
            SystemParametersInfo(20,0,thePath,3);
         }
    }
}
'@

add-type $code

#Apply the Change on the system
[Win32.Wallpaper]::SetWallpaper($imgPath)

Der Pfad zur gewünschten Bilddatei wird der Variablen $imgPath zugewiesen.
zB: $imgPath="C:\temp\mein_bild.png"
Ich weiß nicht, ob diese Lösung hier oder im Unterforum "Programmieren" schon bekannt ist,
ich habe zumindest nichts über die Suche gefunden.

Andere Lösungen in der Art von
Code:
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v Wallpaper /t REG_SZ /d  "C:\xxxx\yyyy\mein_bild.png" /f
RUNDLL32.EXE USER32.DLL ,UpdatePerUserSystemParameters ,1 ,True
habe ich in verschiedensten Varianten (die man vielfach im Netz findet) nicht 100%ig zum Laufen bekommen.
 
Zuletzt bearbeitet: (Fundstellen-URL ganz oben hat sich geändert)
Jugend forscht... :D
Ich habe ein über 20 Jahre altes Kalendertool reaktiviert, welches einen Kalender auf den Desktop legt.
Eigentlich ganz banal. Ähnelt dem Rainlendar, hat aber nicht dessen Funktionsumfang.
WallCal.PNG
© 1999-2000 Rainer Reusch & Toolbox
Einen Kalender kann man immer brauchen! Deshalb sollte er immer präsent sein, aber nicht stören.
Hier ist die Lösung! Der Toolbox Hintergrundkalender präsentiert sich als Hintergrundbild auf dem
Desktop von Windows. Er zeigt den aktuellen Tag, die Kalenderwoche und die Feiertage an. Er ist im
Darstellungsumfang und im Outfit frei konfigurierbar, für Windows 95, 98 und NT geeignet.
Rechtliches:
Das Installationspaket und die darin enthaltenen, compilierten Programme WALLCAL.EXE,
WCSERV.EXE und WCCPL.CPL des Toolbox Hintergrundkalenders sind Freeware. Das heisst, diese
Dateien dürfen in unveränderter Form beliebig oft kopiert und weiter gegeben werden. Die
Weitergabe von Quelltexten ist nicht gestattet! Sie werden lediglich Lesern der Zeitschrift Toolbox
zum eigenen Gebrauch zur Verfügung gestellt.
Die Quelltexte dieser Programmversion wurden in der Toolbox, Ausgabe 2/2000 veröffentlicht.
Eine ausführliche Beschreibung des Programmes finden Sie in der Ausgabe 6/1999. Auf der CDROM zu
dieser Ausgabe finden Sie auch eine Sammlung von Bildern.

Das Problem war, daß das Kalendertool ein BMP-Bitmap erzeugt.
Windows 10 erzeugt daraus standardmäßig eine komprimierte JPG-Datei 'TranscodedWallpaper' (ohne Dateiendung) im Verzeichnis: C:\Users\*****\AppData\Roaming\Microsoft\Windows\Themes\
Die Qualität dieser 'TranscodedWallpaper'-Bilddatei war bescheiden, um es vornehm auszudrücken.
Windows 10 legt leider das 'TranscodedWallpaper'-Bild auf den Desktop, nicht das originale Bitmap.

Bei einem PNG-Bitmap war die Konvertierung in JPG 'TranscodedWallpaper'-Bilddatei qualitativ gut,
weil diese ebenfalls eine PNG-Datei ist. (siehe Nachtrag in Beitrag #5)

Also habe ich eine kleine Batchdatei geschrieben, die zuerst das Kalendertool startet, danach ein kleines Tool für die Umwandlung von BMP in PNG, danach das Powerscript um Windows 10 mitzuteilen, daß es gefälligst die PNG-Datei als Hintergrundbild übernimmt. (dauert insgesamt ca 2~3 Sekunden)

Aufgerufen wird die Batchdatei über den Taskplaner beim Anmeldevorgang.
 
Zuletzt bearbeitet:
Wenn man es möglichst umständlich machen will, dann ist deine Lösung bestimmt sehr gut 😉

Die, die es einfach haben wollen, nutzen einfach folgende Registry-Datei:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Control Panel\Desktop]
"JPEGImportQuality"=dword:00000064

Und schon nutzt Windows hochwertige JPEGs. Zumindest von der Dateigröße her. Und mir scheint, dass es auch wirklich funktioniert. Ich hatte bis vor kurzem auch immer PNGs genutzt.

Du kannst ja mal berichten, ob es bei deinem Kalender-Tool auch hilft.
 
Den Registryeintrag "JPEGImportQuality"=dword:00000064 (entsprechend 100% Qualität) habe ich bereits und die Konvertierung von PNG nach JPG ist ja auch gut.
Allerdings mit einer BMP-Datei (~8 MByte) mit scharfen Übergängen (Zahlen und rotes Rechteck auf dem Bild) sieht die durch Windows erzeugte JPG-Datei nicht so sauber aus, deshalb meine Trickserei.

TranscodedWallpaper.jpg

Nachtrag:
Wenn das ausgewählte Hintergrundbild eine PNG-Datei ist, dann wird TranscodedWallpaper nicht im JPG-Format erzeugt, sondern ist wie das Original eine PNG-Datei (mit guter Qualität).
(Hinweismeldung von Irfanview: TranscodedWallpaper ist eine PNG-Datei mit falscher Erweiterung! Umbenennen?)

Wenn das ausgewählte Hintergrundbild eine BMP-Datei ist, dann wird TranscodedWallpaper im JPG-Format erzeugt.
(Hinweismeldung von Irfanview: TranscodedWallpaper ist eine JPG-Datei mit falscher Erweiterung! Umbenennen?)
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Darkman.X
Hi,

mir ging nochmal dein letzter Post durch den Kopf (hatte gerade Langeweile ;)). Ich kann keine Lösung anbieten, aber ich möchte sagen: Es liegt vermutlich nicht an Windows, sondern an deinem Kalenderprogramm oder die Art, wie es an Windows das Bild übermittelt. Zumindest vermute ich es.

Ich habe es mit deinem PNG aus Post #3 (nach Umwandlung in BMP) und mit einem selbst erstellten BMP (mit gleicher Hintergrundfarbe und kleiner Schrift) getestet: In allen Fällen hatte ich mit JPEGImportQuality = 100% keine Kompressionsartefakte.
Selbst ohne dem "JPEGImportQuality"-Eintrag hatte ich zwar Artefakte, aber nicht so schlimm wie bei deinem letzten Post.

mit JPEGImportQuality = 100%ohne JPEGImportQuality
1611768882711.png
1611767945649.png

Hast du mal ausprobiert, das BMP-Bild (wird es irgendwo zwischengespeichert?) manuell per Rechtsklick -> "Als Desktophintergrund festlegen" zum Wallpaper zu machen? Sieht es dann auch so schlecht aus?

Die Ursache des Problems wäre schon interessant...
 
Zuletzt bearbeitet: (Unnötige Frage gelöscht & Screenshots hinzugefügt.)
  • Gefällt mir
Reaktionen: SPB
Darkman.X schrieb:
Hast du mal ausprobiert, das BMP-Bild (wird es irgendwo zwischengespeichert?) manuell per Rechtsklick -> "Als Desktophintergrund festlegen" zum Wallpaper zu machen? Sieht es dann auch so schlecht aus?
Klar, auf das BMP-Bild (~8 MB) habe ich Zugriff, es liegt ja im gleichen Pfad wie das Kalendertool.

Rechtsklick auf das BMP "Als Desktophintergrund festlegen" erzeugt wie erwartet die Datei Transcodedwallpaper im JPG-Format mit einer Größe von 140 kB in der gleichen Qualität wie bei der Generierung über das Kalendertool.

Mir ist klar, daß das Kalendertool den Pfad für die Bilddatei in die Registry schreibt unter:
Code:
HKEY_CURRENT_USER\Control Panel\Desktop\ ->REG_SZ WallPaper
und anschließend einen Befehl zur Übernahme des Bilds für den Desktop anstößt.
Also theoretisch dasselbe wie der Rechtsklick auf das Bild, weil gleiches Ergebnis.

Wenn das Ursprungsbild ein PNG ist (Dateigröße von 18 kB bis 6 MB getestet), dann ist die von Windows erzeugte Datei Transcodedwallpaper eine PNG-Datei, keine JPG-Datei, was mir ja recht ist. ;)


Allerdings habe ich noch etwas anderes festgestellt.
Wenn man das Ändern des Desktophintergrunds über folgende Richtlinie sperrt
Code:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\ActiveDesktop]
"NoChangingWallPaper"=dword:00000001
dann ist das Anstoßen der Bildübernahme durch das Kalendertool gesperrt.
(in den Windows-Systemeinstellungen unter Personalisierung>Hintergrund sind dann logischerweise die 3 Schaltflächen für die Bildauswahl, Durchsuchen und Anpassung auch gesperrt)
Rechtsklick auf ein Bild >"Als Desktophintergrund festlegen" funktioniert trotzdem, wundert mich doch etwas.

Das Script aus Beitrag #1 für die Bildaktualisierung funktioniert auch trotz der Sperre, was mir auch recht ist.
Würde wohl bedeuten, daß das Kalendertool die Bildübernahme anders anstößt als der Rechtsklick auf ein Bild oder das Script. Was Deiner Vermutung entspricht.

Meine Lösung aus Beitrag #2 (Batchdatei mit Umweg BMP->PNG->Script) läuft bis jetzt anstandslos automatisch bei der Benutzeranmeldung ab. Man kann die Batch auch manuell starten, wenn man will.

PS: mein Bildausschnitt mit den Artefakten in Beitrag #5 sieht schlimmer aus als mein derzeitiger Istzustand,
weil ich den Bildausschnitt im Malprogramm mit 'nem schlechten Qualitätsfaktor abgespeichert habe.
Das erklärt Deine besseren Ergebnisse in Beitrag #6.
Vergleich JPG PNG.png

Falls mir noch was dazu einfällt, melde ich das nach. ;)
 
Zuletzt bearbeitet:
Zurück
Oben