Benutzer mit den meisten Antworten
Desktop-Bild auslesen

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- Bearbeitet Robert Breitenhofer Montag, 11. Oktober 2010 11:12 Formatierung
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.
- CurrentUser.GetValue erwartet die Angabe des Names für den Wert der ausgelesen werden soll.
Du übergibst einen kompletten Pfad/Schlüssel - Würde der Wert "Wallpaper" erfolgreich gelesen, würde man man eine Pfadangabe erhalten.
BackgroundImage erwartet jedoch ein Image Object.
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
- CurrentUser.GetValue erwartet die Angabe des Names für den Wert der ausgelesen werden soll.
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.
- CurrentUser.GetValue erwartet die Angabe des Names für den Wert der ausgelesen werden soll.
Du übergibst einen kompletten Pfad/Schlüssel - Würde der Wert "Wallpaper" erfolgreich gelesen, würde man man eine Pfadangabe erhalten.
BackgroundImage erwartet jedoch ein Image Object.
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
- CurrentUser.GetValue erwartet die Angabe des Names für den Wert der ausgelesen werden soll.
-
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- Bearbeitet Robert Breitenhofer Montag, 11. Oktober 2010 11:13 Formatierung
-
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 -
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