Autor Beitrag
strahlemann
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 35

WinXP
Delphi7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 44

Win 7 Pro
RAD Studio 2010 Pro
BeitragVerfasst: Do 23.11.06 18:36 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var s : String;
    a : Array[0..1024of 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 35

WinXP
Delphi7
BeitragVerfasst: 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.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.FormCreate(Sender: TObject);
var a : Array[0..1024of 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 35

WinXP
Delphi7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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:
ausblenden 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 =(01);
 aStrech: Array[Boolean] of Byte =(02);
begin
  with TRegIniFile.Create('Control Panel\Desktop'do try
    WriteString('''Wallpaper', sWallpaper);
    WriteInteger('''TileWallpaper', aTile[bTile]);
    WriteInteger('''WallpaperStyle', aStrech[bStrech]);
  finally Free end;

  //Aktualisiert das Hintergrundbild
  SystemParametersInfo(SPI_SETDESKWALLPAPER, 0nil, SPIF_SENDWININICHANGE);
end{Popov}

und das scheint nicht so recht zu funktionieren. Ich hab noch einen weiteren Code ausprobiert. Dieser ging allerdings überhaupt nicht.
Manfred
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 90



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: So 06.12.09 12:35 
also damit gehts in c# müsste ja das selbe in delphi sein vom syntax her
ausblenden 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
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
OpenFileDialog ofd = new OpenFileDialog();
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                int change = SystemParametersInfo(200, 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 user profile iconNarses: C#-Tags hinzugefügt