Canvas not supported
Canvas not supported
Suchen
Bookmark
Canvas not supported
Shine Effekt
Direkt zum Seiteninhalt

Hauptmenü:

Wallpaper / Desktop-Hintergrund automatisiert ändern

 

Autor:

Oscar Kohler

Version:

0.11

Level:

Einfach

Sprache:

C/C++


 
Haftungsausschluss / Disclaimer
Kontakt / Contact
Drucken / Print


In manchen Situationen ist es notwendig, den Desktop Hintergrund, auch Wallpaper genannt, programmgesteuert zu wechseln oder zu ändern. Beispielsweise weil man eine System Wartung, eine Programm Installation oder gar einen Viren Befall unübersehbar anzeigen möchte. Natürlich könnte man auch eine MessageBox verwenden, jedoch zeigt eine bildschirmfüllende Information eine ganz andere Wirkung. Ein weiteres Beispiel wäre der Einsatz eines Programmes, das definierte Systemdaten zur Information in das Wallpaper schreibt. Gründe genug, sich das Ganze genauer anzusehen ...

Wallpaper manuell ändern


Am einfachsten können wir das Wallpaper natürlich von Hand ändern. Indem wir über die "Systemsteuerung -> Anpassung -> Desktophintergrund" das gewünschte Bild, sowie den Anzeigemodus auswählen und bestätigen.

Flups, in diesem Augenblick wird auch schon das neue Wallpaper angezeigt.

Leider ist dieser Vorgang schwer zu automatisieren ...

Wallpaper in der Registry


Die jeweiligen Parameter speichert das System in der Benutzer-Registry.


Eine Warnung gleich vorweg: Änderungen an der Registry können das System zerstören, daher wird davon abgeraten. Jede Änderung geschieht natürlich auf eigene Gefahr !


[
HKEY_CURRENT_USER\Control Panel\Desktop]
  WallpaperStyle [REG_SZ]:
 ... Anzeigemodus, 0 - Zentrieren / 2 - Strecken
  TileWallpaper [REG_SZ]:
 ... Kachelung, 0 - Zentrieren / 1 - Kacheln
  WallPaper [REG_SZ]:
 ... Pfad zum Wallpaper
  WallpaperOriginX [DWORD]:
 ... Ursprung - X
  WallpaperOriginY [DWORD]:
 ... Ursprung - Y

Technet: WallpaperStyle

Technet: TileWallpaper


Ändern wir die Settings direkt in der Registry, wie es in vielen Foren Beiträgen empfohlen wird, dann halsen wir uns gleich mehrere Probleme auf.

  • Möglicherweise werden die Attribute zukünftig geändert,

  • Der Pfad zum Wallpaper wird fix hinterlegt und bleibt auch nach einem Reboot bestehen,

  • Nach der Änderung passiert erst mal gar nichts, da eine Neuanmeldung erforderlich ist.


Alleine schon aufgrund des dritten Punktes, können wir diese Methode für unsere Zwecke abhaken und in den Eimer schmeissen ...

Welche Möglichkeiten gäbe es denn sonst noch ... aja da gibt es doch noch diese SPI Api ...

Wallpaper automatisiert ändern mit der SPI Api


Wallpaper Settings sind sogenannte System(weite) Parameter, wie auch hunderte andere, die sich über die Systemeinstellung ändern lassen.

Zu diesem Zweck stellt Microsoft eine API zur Verfügung, mit der dutzende dieser System(weiten) Parameter gelesen oder beschrieben werden können.

Auch wenn die SPI Api irgendwie zum experimentieren "einlädt", ist sie mit gosser Vorsicht zu behandeln ! Es sind einige Parameter dabei, die das System mächtig ins Strudeln bringen können.

Die Parameter werden in unterschiedliche Gruppen eingeteilt:

  • Eingabehilfe

  • Desktop

  • Icon

  • Eingabe

  • Menü

  • Power

  • Bildschirmschoner

  • Time-out

  • UI Effekte

  • Fenster


[msdn]

Die SPI Api Funktion hat die folgende Signatur:

BOOL WINAPI SystemParametersInfo (
 __in     UINT uiAction,
 __in     UINT uiParam,
 __inout  PVOID pvParam,
 __in     UINT fWinIni
);


uiAction: System(weiter) Parameter
uiParam: Wert hängt vom jeweiligen System Paramater ab, '0' wenn nicht benötigt.
pvParam: Wert hängt vom jeweiligen System Paramater ab, 'NULL' wenn nicht benötigt.
fWinIni: User Profile Aktualisierung, 0 - keine Aktualisierung

MSDN: SystemParametersInfo



Wallpaper automatisiert ändern in der Praxis ...



Ein paar Besipiele aus der Praxis aufgegriffen ...


System Wartung


Wir wollen auf dem Desktop unübersehbar anzeigen, dass die Maschine z.Z. in Wartung ist. Dazu legen wir das Desktop-Wartungs-Bild unter einem bestimmten Pfad ab, in unserem Fall unter: "c:\temp\wartung.jpg"


[Das Bildformat ".jpg" ist erst ab Windows Vista verfügbar.]

Nun setzen wir das Wallpaper mit dem Befehl: SystemParametersInfo, dem Actionparameter: SPI_SETDESKWALLPAPER, und dem Pfad zum Bild.

SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, _T("c:\temp\wartung.jpg"), 0);

Der Desktop wird augenblicklich aktualisiert und zeigt nun das neue Wartungs Bild an. Da wir den fWinIni Parameter auf 0 gesetzt haben, ist dies eine rein temporäre Änderung.

Wollen wir wieder das "Original" Bild, welches in der Registry gespeichert wurde, auf dem Desktop anzeigen, können wir den Default Parameter verwenden:

SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, SETWALLPAPER_DEFAULT, 0);

Remote-Desktop-Verbindungen


Um das Netzwerk, und die Nerven der Administratoren, bei einer Remote-Desktop-Verbindung zu entlasten, möchten wir während der Remote Session ein leeres Hintergrund Bild anzeigen:

SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, _T(""), 0);

Ist die Remote Verbindung beendet, können wir wieder zum "Original" Hintergrundbild wechseln:

SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, SETWALLPAPER_DEFAULT, 0);

System Informationen auf dem Desktop anzeigen


Oft ist es sehr praktisch, wenn wichtige System Informationen, wie z.B.: Computername, IP-Adresse, CPU Auslastung, Memory Auslastung, ... auf dem Desktop angezeigt werden.
Auf dem Markt sind verschiedene Tools erhältlich, die definierte Informationen in ein Bild rendern (schreiben). Verwenden wir dieses Bild als Wallpaper, so haben wir diese Informationen immer vor Augen.

Nun können wir entweder dieses Wallpaper setzen, indem wir den Pfad mitgeben, oder wir führen dies mit folgenden drei Schritten durch.

  • Der Pfad zum Wallpaper einmalig einstellen, z.B.: manuell in der Systemsteuerung,

  • Das Wallpaper wird durch das System-Info-Tool periodisch mit neuen Informationen überschrieben,

  • Um das Wallpaper nun anzuzeigen, müssen wir nur noch das Wallpaper "refreshen".


SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, SETWALLPAPER_DEFAULT, 0);

Nun werden die System Informationen periodisch, je nach Intervall in der wir das Wallpaper refreshen, dargestellt.

Eines dieser Tools nennt sich BgInfo und findet sich auf Sysinternals.

Sysinternals: BgInfo

Ein Wermutstropfen bleibt: Der Anzeigemodus (WallpaperStyle, TileWallpaper) lässt sich nicht über die SPI Api ändern, dieser muss daher im vorhinein definiert werden.


 
Kein Kommentar
 
Letzte Änderung: 03.02.2015
button Canvas not supported button
Zurück zum Seiteninhalt | Zurück zum Hauptmenü