Hintergrundbild verändern ?

JJB

Cogito ergo brumm
Tach !

Hat jemand eine Ahnung, ob es möglich ist, durch ein .Net Programm das Hintergrundbild der Windowsoberfläche zu verändern/tauschen ?
Natürlich inkl. der Parameter Strecken, zentrieren, etc.

Wäre für jede Hilfe dankbar,
JJB
 
Es funktioniert nicht.

SystemParametersInfo gibt den Returnwert 1 zurück.
Ich finde jedoch kein Erklärung zu den Returnwerten.

Jemand eine Idee ?
 
Also um die korrekten Aufrufe hierfür scheiden sich die Geister.
Der eine meint es geht nur so der andere meint es geht anders. Dann gibt es da noch die Differenzen zwischen XP Home und XP Prof und schließlich Vista.

Das beste das man erreichen kann ist, dass der Wert geändert wird und nach Neuanmeldung ein neues Bild erscheint. Aber das auch nicht zuverlässig auf jedem System.

Daher hab ich mich entschieden das selbe auf eher alt bewährte Weise zu lösen:
Ich ersetze die Datei "C:\Dokumente und Einstellungen\<User>\Lokale Einstellungen\Anwendungsdaten\Microsoft\Wallpaper1.bmp" in welche Windows sein Hintergrundbild temporär ablegt.

Mit dem Befehl "rundll32.exe user32.dll,UpdatePerUserSystemParameters" erzwinge ich die Aktualisierung der Systemparameter und das Bild ist sofort da.

Wenn es Probleme mit dem Bildformat gibt, empfehle ich die Bildaten, sofern .Net gültig, in ein Image zu laden und als BMP unter dem beschriebenen Pfad abzuspeichern. Ein Format 4:3 lässt sich am besten darstellen.

Das ist nicht die eleganteste aber eine sichere Lösung. Zudem wird das Default Bild bzw. das zuletzt manuell ausgewählte und durch die Anzeige Einstellungen konvertierte Bild nicht gelöscht und liegt als Fallback Wert immer noch vor.

Problem gelöst, danke für das Feedback !
 
Zuletzt bearbeitet:
Hey,

Also bei mir funktioniert der zuerst gepostete Programmcode. Den habe ich heute selber gefunden, jedoch gelingt es mir nicht die Einstellungen Gestreckt/Nebeneinander/Zentriert zu ändern. Wie kann man das machen?

Gruß David
 
Ist sicherlich auch wieder nur eine Frage der Registry Werte.
Wenn du es genau wissen willst, schreib sie dir aus, verändere die Anzeigeeinstellungen und vergleiche die Registry mit dem alten Wert. Zum Beipsiel mit ExamDiff oder so.
 
Moin,

Habe den Code fertig. Es funktioniert alles, sogar ohne Neustart ;)

Code:
        Dim MeinKey As RegistryKey
        ' Einen Registryzweig zum Schreiben öffnen 
        MeinKey = Registry.CurrentUser.OpenSubKey("Control Panel\Desktop", True)

        'Zentriert
        If Parameter.Display(ListImages.SelectedIndex) = 0 Then
            MeinKey.SetValue("WallpaperStyle", "1")
            MeinKey.SetValue("TileWallpaper", "0")
        End If

        'Nebeneinander
        If Parameter.Display(ListImages.SelectedIndex) = 1 Then
            MeinKey.SetValue("WallpaperStyle", "1")
            MeinKey.SetValue("TileWallpaper", "1")
        End If

        'Gestreckt
        If Parameter.Display(ListImages.SelectedIndex) = 2 Then
            MeinKey.SetValue("WallpaperStyle", "2")
            MeinKey.SetValue("TileWallpaper", "0")
        End If

        ' Den Registryzweig schließen 
        MeinKey.Close()
 
Das Problem sind nur die Bildverhältnisse.
Wenn es nicht zum Bildschirm oder zumindest auf 4:3 passt, sieht es gestreckt komisch aus.
 
Das kann man sich ja vorher machen wie mans braucht. Ich kann mit ...Bounds.Width und Height die Auflösung auslesen. Dann muss ich nur noch herausfinden, wie ich die Bilder ausschneiden kann und dann kann ich das Bild bearbeiten und auf das gewünschte Format setzen. Mein Notebook hier hat 16:10. Das hat auch nichts mehr mit 4:3 zu tun, daher bearbeite ich jeden Hintergrundbild vorher.
Ich weiß nur noch nciht genau wie ich die Bilder ausschneiden kann im Code. Habe das schonmal in Delphi gemacht, muss mal sehen wie das in VB.NET funktioniert.

Gruß David
 

Neue Beiträge

Zurück