Fliegender Wechsel

Windows-Hintergrundbilder automatisch ändern

Praxis & Tipps | Praxis

Da gibt es tausende hübsche Bilder im Internet, und Sie arbeiten seit Jahren mit demselben Windows-Hintergrund? Ja, weil es viel zu umständlich ist, die Datei nach jedem Systemstart manuell auszuwechseln.

Seit c't Titelmotive in unterschiedlichen Auflösungen zum Download bereitstellt [1], häufen sich die Leseranfragen: ‘Ich will alle haben, und zwar abwechselnd!’ Mit dem Windows Scripting Host, schon häufiger Mittelpunkt von Praxisbeiträgen, ist das kein Problem. Genügend RAM sollten Sie aber besitzen: Bilder mit hoher Farbtiefe belegen je nach Auflösung zwischen 1 und 4 MByte Hauptspeicher.

In [2] haben wir gezeigt, wie Skripte in der Windows-Registry schalten und walten können. Das allein nützt jedoch nicht viel, wenn Windows Änderungen in der Registry erst zur Kenntnis nehmen muss, bevor Effekte zu sehen sind. Zum Glück gibts die API-Funktion SystemParametersInfo: Änderungswünsche, die sie an Windows sendet, werden automatisch an den richtigen Stellen in der Registry eingetragen und sofort wirksam.

Damit auch Skripte diesen API-Befehl nutzen können, haben wir eine kleine Befehlserweiterung geschrieben; die passende Entwicklungsumgebung VB CCE liefert Microsoft kostenlos [3]. Um mit dem abgedruckten Programm sysparam.txt zu experimentieren, erzeugen Sie ein neues Projekt als ActiveX-Steuerelement. Tippfaule finden die fertigen Dateien auch auf heise online [4]. Im Paket enthalten ist das kompilierte Modul update.ocx. Es genügt, dieses in den Windows-Ordner zu kopieren und dann mit dem Aufruf regsvr32.exe update.ocx (von der Kommandozeile aus) im System zu registrieren.

Anschließend steht dem Scripting Host das neue COM-Objekt ct.update zur Verfügung, das nur eine Funktion bietet: ChangeSetting sendet Windows neue Einstellungen für eine Vielzahl von Windows-Parametern, indem sie sie an die API-Funktion SystemParametersInfo weiterleitet.

Das Beispielskript desktop.vbs aktiviert bei jedem Start zufallsgesteuert ein neues Desktop-Hintergrundbild. Als Bildquelle verwendet es den Ordner, den man in der Variablen bildarchiv definiert, zum Beispiel ‘C:\Bilder’.

Man kann das Skript wahlweise manuell aufrufen oder in den Autostart-Ordner von Windows 95, 98, NT oder 2000 verfrachten, um bei jedem Neustart automatisch ein anderes Hintergrundbild zu aktivieren. Es gibt allerdings einen kleinen Haken: die Routine akzeptiert nur Bilder im Standard-BMP-Format, nicht etwa JPG-Dateien. Die vermag zwar der Active Desktop anzuzeigen, doch der kann Hintergrundbilder aufgrund eines Fehlers nicht dynamisch, sondern nur nach einem Neustart ändern. Sprich: Wenn Sie möchten, dass das Skript auch während der Laufzeit funktioniert, müssen Sie den Active Desktop deaktivieren.

ChangeSetting akzeptiert bis zu vier Argumente: Mit dem ersten wird festgelegt, welche Windows-Einstellung überhaupt verändert werden soll. Codezahl 20 steht für das Desktop-Hintergrundbild; übergeben wird der Pfadname desselben. Als Transportmittel für die Nummer des Bildes, die per Zufall erzeugt wird, benutzt es das dritte Argument, sodass das zweite ungenutzt bleibt und auf null gesetzt wird. Es gibt noch jede Menge andere Codezahlen: Codezahl 37 beispielsweise schaltet mit dem zweiten Argument (1 oder 0) die Funktion zum Verschieben von ganzen Fenstern ein und aus, während Codezahl 4105 mit dem dritten Parameter (true oder false) bei Windows 98/2000 die Farbverläufe der Titelleisten zu- und abschaltet. Sie verwenden mitunter auch das zweite Argument für ihre Änderungswünsche. Optional kann man das vierte Argument bestücken: Mit ‘0’ sind die Änderungen temporär, mit ‘1’ schreibt Windows die Änderungen dauerhaft in die Registry. Weitere Informationen liefert das Microsoft SDK zu Windows [5] unter dem Stichwort ‘SystemParametersInfo’. Viel Spaß beim Experimentieren! (se)

[1] c't-Bildschirmhintergründe, www.heise.de/ct/motive/

[2] Tobias Weltner: Schatzsuche, Skripte erschließen die Windows-Registry, c't 3/00, S. 216

[3] Tobias Weltner: Objekte auf Draht, Eigene Scripting-Erweiterungen schreiben mit Visual Basic CCE, c't 25/99, S. 232

[4] c't-Listings, www.heise.de/ct/ftp/listings.shtml

[5] Microsoft Developer Network

Kommentare