none
Desktop-Bild auslesen RRS feed

  • Frage

  • Hallo,

    ich möchte in einer Anwendung erreichen, dass meine Form als Hintergrundbild gleiche Bild verwendet, das der Anwender auf  seinem Desktop hat und habe zu diesem Thema folgenden Code gefunden:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    	Me.BackgroundImage = My.Computer.Registry.CurrentUser.GetValue("HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper")
    End Sub

    Leider funktioniert der bei mir unter Windows XP nicht. Kann mir jemand sagen warum und wie es tatsächlich geht?


    Liebe Grüße Stefan Ich verwende Visual Basic 2008 ------------------------------------------------ Cheers Stefan Express I'm using Visual Basic 2008 Express
    Sonntag, 10. Oktober 2010 20:53

Antworten

  • Hallo Stefan,

    ich möchte in einer Anwendung erreichen, dass meine Form als Hintergrundbild gleiche Bild verwendet, das der Anwender auf  seinem Desktop hat und habe zu diesem Thema folgenden Code gefunden:

     

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Me.BackgroundImage = My.Computer.Registry.CurrentUser.GetValue("HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper")
        End Sub

    Wo willst Du diesen Code gefunden haben?

     

    Leider funktioniert der bei mir unter Windows XP nicht.

    Der kann auf keinem System funktionieren. Niemals.

    1. CurrentUser.GetValue erwartet die Angabe des Names für den Wert der ausgelesen werden soll.
      Du übergibst einen kompletten Pfad/Schlüssel
    2. Würde der Wert "Wallpaper" erfolgreich gelesen, würde man man eine Pfadangabe erhalten.
      BackgroundImage erwartet jedoch ein Image Object.
    Wie funktioniert es? So:

    Me.BackgroundImage = Bitmap.FromFile(Microsoft.Win32.Registry.GetValue( _ 
               "HKEY_CURRENT_USER\Control Panel\Desktop\", _
               "Wallpaper", "").ToString())
    
    

    Man muss das nicht als Einzeiler (oder Drei..) schreiben, sondern kann auch zunächst entscheiden, ob man einen sinnvollen Wert aus der Registry lesen konnte.

    Wenn Du mehrere Werte aus "HKCU\Control Panel\Desktop" lesen möchtest, empfiehlt es sich, zunächst mit bspw. Registry.CurrentUser.OpenSubKey den Unterschlüssel zu öffnen und dann die einzelnen Werte über GetValue zu lesen.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    • Als Antwort markiert Giftzwockel Montag, 11. Oktober 2010 17:53
    Sonntag, 10. Oktober 2010 21:13

Alle Antworten

  • Hallo Stefan,

    ich möchte in einer Anwendung erreichen, dass meine Form als Hintergrundbild gleiche Bild verwendet, das der Anwender auf  seinem Desktop hat und habe zu diesem Thema folgenden Code gefunden:

     

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Me.BackgroundImage = My.Computer.Registry.CurrentUser.GetValue("HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper")
        End Sub

    Wo willst Du diesen Code gefunden haben?

     

    Leider funktioniert der bei mir unter Windows XP nicht.

    Der kann auf keinem System funktionieren. Niemals.

    1. CurrentUser.GetValue erwartet die Angabe des Names für den Wert der ausgelesen werden soll.
      Du übergibst einen kompletten Pfad/Schlüssel
    2. Würde der Wert "Wallpaper" erfolgreich gelesen, würde man man eine Pfadangabe erhalten.
      BackgroundImage erwartet jedoch ein Image Object.
    Wie funktioniert es? So:

    Me.BackgroundImage = Bitmap.FromFile(Microsoft.Win32.Registry.GetValue( _ 
               "HKEY_CURRENT_USER\Control Panel\Desktop\", _
               "Wallpaper", "").ToString())
    
    

    Man muss das nicht als Einzeiler (oder Drei..) schreiben, sondern kann auch zunächst entscheiden, ob man einen sinnvollen Wert aus der Registry lesen konnte.

    Wenn Du mehrere Werte aus "HKCU\Control Panel\Desktop" lesen möchtest, empfiehlt es sich, zunächst mit bspw. Registry.CurrentUser.OpenSubKey den Unterschlüssel zu öffnen und dann die einzelnen Werte über GetValue zu lesen.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    • Als Antwort markiert Giftzwockel Montag, 11. Oktober 2010 17:53
    Sonntag, 10. Oktober 2010 21:13
  • Hallo Thorsten,

    … will ich nicht nur gefunden haben.  Wenn ich selbst unsinnigen Code schreibe gebe ich das auch zu. Den Code habe ich tatsächlich gefunden und das in einer an und für sich soliden Quelle.

    Quelle: http://forum.vb-paradise.de/programmieren/hauptforum/7384-desktop-hintergrund-auslesen/

    Da waren auch noch andere Vorschläge die aber auch nicht funktionierten.

    Bei deiner Lösung habe ich übrigens folgende Fehlermeldung bekommen:

    FileNotFoundExeption wurde nicht behandelt

    C:\Users\Stefan\Pictures\Unbenannt.jpg gibt tatsächlich nicht.

    OK, Bild nicht gefunden, aber genau das war es doch, was ich wollte. Es ist doch sehr wahrscheinlich, dass der Anwender ein eigenes Bild verwendet.

    Ermittelt man das bei XP anders als bei Windows 7? Da hätte ich dann ja eine Möglichkeit der FileNotFoundExeption.

    Noch eleganter ist es sicher, im Vorfeld festzustellen, welches Betriebssystem auf dem PC ist und für den Fall, das man das betriebssystemabhängig anders ermittelt, dann macht.

    Wie ich das Betriebssystem ermittle weiß ich aber auch nicht.

    Ermittelt man das bei XP anders als bei Windows 7? Da hätte ich dann ja eine Möglichkeit der FileNotFoundExeption.

    Noch eleganter ist es sicher, im Vorfeld festzustellen, welches Betriebssystem auf dem PC ist und für den Fall, das man das betriebssystemabhängig anders ermittelt, dann macht.

    Wie ich das Betriebssystem ermittle weiß ich aber auch nicht.


    Liebe Grüße Stefan | Cheers Stefan I'm using VB 2008 Express
    Sonntag, 10. Oktober 2010 21:49
  • Hallo Stefan,

    Quelle: http://forum.vb-paradise.de/programmieren/hauptforum/7384-desktop-hintergrund-auslesen/

    Da steht es auch einmal richtig drin. Schwer zu finden, zugegeben.

    Bei deiner Lösung habe ich übrigens folgende Fehlermeldung bekommen:

    FileNotFoundExeption wurde nicht behandelt

     

    C:\Users\Stefan\Pictures\Unbenannt.jpg gibt tatsächlich nicht.

     

    OK, Bild nicht gefunden, aber genau das war es doch, was ich wollte. Es ist doch sehr wahrscheinlich, dass der Anwender ein eigenes Bild verwendet.

     

    Ermittelt man das bei XP anders als bei Windows 7?

    Wenn die Datei, die das Hintergrundbild bereitstellen sollte nicht gefunden wird, hat das erst mal wenig mit XP oder Windows 7 zu tun. Der von mir genannte Code funktioniert sowohl unter Windows 7, als auch unter Windows XP.

    Es ist zu vermuten, dass Du auch aktuell kein Hintergrundbild angezeigt bekommst. Es sei denn Dein Hintergrund wird durch einen Webinhalt (HTML etc. dargestellt). Leg mal ein ganz einfaches Windows Bitmap (.bmp) als Hintergrundbild fest und versuche diesen Wert auszulesen.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    Sonntag, 10. Oktober 2010 22:10
  • Hallo Thorsten,

    steht es auch einmal richtig drin. Schwer zu finden, zugegeben. 

    Naja, da kann man sich dann von vielen Meldungen die richtige raussuchen? Grundsätzlich bin ich dafür auch zu haben und freue mich über jeden Lösungsansatz.

    Wenn die Datei, die das Hintergrundbild bereitstellen sollte nicht gefunden wird, hat das erst mal wenig mit XP oder Windows 7 zu tun. Der von mir genannte Code funktioniert sowohl unter Windows 7, als auch unter Windows XP.

    Es ist zu vermuten, dass Du auch aktuell kein Hintergrundbild angezeigt bekommst. Es sei denn Dein Hintergrund wird durch einen Webinhalt (HTML etc. dargestellt). Leg mal ein ganz einfaches Windows Bitmap (.bmp) als Hintergrundbild fest und versuche diesen Wert auszulesen.

    Leider haben auch die richtigen Lösungen nicht zum Erfolg geführt. Mein Hintergrundbild (es gibt eines) ist im JPG-Format. Aber ich werde es mal mit BMP versuchen. Die Auswahl des Hintergrundbildes erfolgt über die Durchsuchen-Funktion.

     



    Liebe Grüße Stefan | Cheers Stefan I'm using VB 2008 Express
    Montag, 11. Oktober 2010 06:10
  • Hallo Thorsten,

    ich weiß nicht warum, aber jetzt funktioniert es.


    Liebe Grüße Stefan | Cheers Stefan I'm using VB 2008 Express
    Montag, 11. Oktober 2010 17:53