Autor |
Beitrag |
strahlemann
      
Beiträge: 35
WinXP
Delphi7
|
Verfasst: Do 23.11.06 17:41
Hello,
ich würd gern mit einem Programm den Bildschirmhintergrund ändern. Einfach den Pfad eines Bildes eintippen, mit Openpicturedialog aussuchen, sonstwas --> Knöpchen drücken -->Bildschirmhintergrund geändert. Bloß wie. Wie geht das??? Wo steht drinnen, welches Bild grad Desktophintergrund spielen darf?? Wäre für Hilfe dankbar
Ach ja und bevor da jetzt die Fragen kommen, warum ich das will, und warum ich nicht einfach Rechtsklick auf den Desktop-->Desktop-->Hintergrund ändern tu, dann kann ich sagen, mein ziel ist es, ein Programm zu haben, welches, den Hintergrund auf Wahl Wöchentlich, täglich oder bei jedem booten automatisch ändert.
Danke
_________________ Es gibt Aufgaben die zu erfüllen wären,
den traurigen die Welt erklären (Tomte)
Zuletzt bearbeitet von strahlemann am Mi 02.05.07 14:19, insgesamt 1-mal bearbeitet
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Do 23.11.06 18:00
Du musst einen Eintrag in der Registry ändern:
HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper
Aber bitte nochmal prüfen. Ich bin mir nicht 100%ig sicher.
|
|
Manina
      
Beiträge: 44
Win 7 Pro
RAD Studio 2010 Pro
|
Verfasst: Do 23.11.06 18:36
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| var s : String; a : Array[0..1024] of Char;
...
if OpenDlg.Execute then begin s := OpenDlg.FileName; if FileExists(s) then begin StrPCopy(a, s); SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, @a, SPIF_UPDATEINIFILE); end; end; |
_________________ Gates, oder Gates nicht ?
|
|
strahlemann 
      
Beiträge: 35
WinXP
Delphi7
|
Verfasst: So 10.12.06 15:52
Gates nicht!
Ich habs erst jetzt ausprobiert, de facto wird der Hintergrundbildschirm blau. Weil Blau die meinige Hintergrundfarbe ist. Aber sonst tut sich dar gar nix.
Im Endeffekt will ich eigentlich ein Programm, dass unter anderem beim Hochfahren das Hintergrundbild auf die aktuelle Woche abstimmt. Das hab ich, was rauskommt steht oben.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.FormCreate(Sender: TObject); var a : Array[0..1024] of Char; begin if FileExists('D:\Eigene Bilder\Wallpapers\'+inttostr(WeekOftheYear(Now))+'.jpg') then begin StrPCopy(a, 'D:\Eigene Bilder\Wallpapers\'+inttostr(WeekOftheYear(Now))+'.jpg'); SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, @a, SPIF_UPDATEINIFILE); end; end; |
Ich hab auch schon bei anderen Seiten geschaut, beispielsweise bei www.ensacom.de aber da war genau das selbe Problem.
_________________ Es gibt Aufgaben die zu erfüllen wären,
den traurigen die Welt erklären (Tomte)
|
|
strahlemann 
      
Beiträge: 35
WinXP
Delphi7
|
Verfasst: So 10.12.06 18:09
Gates doch!
Aber nur mit bmp und nicht mit jpg
_________________ Es gibt Aufgaben die zu erfüllen wären,
den traurigen die Welt erklären (Tomte)
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Fr 20.11.09 20:46
Ich bin gerade auf das selbe Problem gestoßen. Wie kann ich jegliches von Windows unterstütztes Bild-Format als Hintergrundbild zulassen?
(So als würde man im Kontext-Menü "Als Hintergrundbild verwenden" klicken)
Momentan benutze ich:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure SetWallpaperSystem(sWallpaper : String; bTile, bStrech: Boolean); const aTile: Array[Boolean] of Byte =(0, 1); aStrech: Array[Boolean] of Byte =(0, 2); begin with TRegIniFile.Create('Control Panel\Desktop') do try WriteString('', 'Wallpaper', sWallpaper); WriteInteger('', 'TileWallpaper', aTile[bTile]); WriteInteger('', 'WallpaperStyle', aStrech[bStrech]); finally Free end;
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil, SPIF_SENDWININICHANGE); end; |
und das scheint nicht so recht zu funktionieren. Ich hab noch einen weiteren Code ausprobiert. Dieser ging allerdings überhaupt nicht.
|
|
Manfred
      
Beiträge: 90
|
Verfasst: Fr 04.12.09 09:33
Hi,
das als Hintergrund unterstützte Bildformat lautet BMP. Sonst nichts.
Das man jpg auswählen kann liegt daran, das Windows das Bild erst konvertiert.
Erkennbar ist dies auch in der Registry im Folder
HKEY_CURRENT_USER/Control Panel/Desktop
Siehe:
- ConvertedWallpaper
- ConvertedWallpaper Last WriteTime
- OriginalWallpaper
- WallPaper
- WallpaperStyle
- TileWallpaper
Über diese Schlüssel wird vermerkt, wo das Original (sofern nicht BMP) lag (ConvertedWallpaper), wohin es konvertiert wurde (OriginalWallpaper) und wann (ConvertedWallpaper Last WriteTime).
Wurde eine BMP direkt ausgewählt, werden diese Einträge nicht berührt.
Das aktuelle Hintergrundbild (zwingend BMP) findet man im Schlüssel WallPaper.
Zudem wird festgehalten wie es dargestellt wird:
Zentriert:
- TileWallpaper = 0
- WallpaperStyle = 0
Nebeneinander:
- TileWallpaper = 1
- WallpaperStyle = 0
Gestreckt:
- TileWallpaper = 0
- WallpaperStyle = 2
Diese Infos gelten für Win XP SP3
Edit: Nachtrag
Änderungen in der Registry sind insofern unnütz, als das sich der Hintergrund erst beim nächsten Start ändern würde.
Daher besser: Finger weg.
Besser SystemParametersInfo(SPI_SETDESKWALLPAPER... verwenden
_________________ Computer können schneller rechnen als wir, deshalb machen sie auch mehr Fehler
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Fr 04.12.09 19:38
Ich möchte das Hintergrundbild ohnehin nur am Start ändern. Wenn es erst beim nächsten Start passieren würde, wäre mir das also auch recht.
Man kann aber nicht irgendwie die Funktion von Windows in seinem Programm nutzen, sodass man sich nicht selber um das Konvertieren kümmern muss, oder?
|
|
FragSalat
      
Beiträge: 24
|
Verfasst: So 06.12.09 12:35
also damit gehts in c# müsste ja das selbe in delphi sein vom syntax her
C#-Quelltext 1: 2:
| [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni); |
und dann
C#-Quelltext 1: 2: 3: 4: 5:
| OpenFileDialog ofd = new OpenFileDialog(); if (ofd.ShowDialog() == DialogResult.OK) { int change = SystemParametersInfo(20, 0, ofd.FileName, 0x1 | 0x2); } |
sprich nen openfiledialog erzeugen und öffnen wenn das ergebnis ok ist führe SystemParametersInfo aus
mit den parametern kenn ich mich nicht so genau aus aber das lässt dich bestimmt in der msdn nachlesen
und das ändert das wallpaper direkt nicht erst beim nächsten start
mfg FragSalat
Moderiert von Narses: C#-Tags hinzugefügt
|
|
|