AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Desktop Hintergrund ändern und aktualisieren
Thema durchsuchen
Ansicht
Themen-Optionen

Desktop Hintergrund ändern und aktualisieren

Ein Thema von Matze · begonnen am 4. Mai 2005 · letzter Beitrag vom 24. Sep 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

Desktop Hintergrund ändern und aktualisieren

  Alt 4. Mai 2005, 14:08
Hallo!

Bisher habe ich den Desktop mittels

InvalidateRect(0,nil,true); aktualisiert, was eigentlich auch recht gut funktioniert.

Ändere ich ein Hintergrundbild in Windows 98 oder XP und führe diesen Code aus, dann ändert sich das Hintergrundbild sofort. Unter Windows 2000 nicht, sondern erst, wenn man sich neu anmeldet.

Wie kann man allgemein den Desktop aktualisieren?
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#2

Re: Desktop aktualisieren

  Alt 4. Mai 2005, 14:28
Wenn du das Hintergrundbild über SetSystemParametersInfo (oder so ähnlich) änderst, sollte die aktualisierung automatisch geschehen.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Desktop aktualisieren

  Alt 4. Mai 2005, 14:30
Genau damit ändere ich ihn, aber es geht, wie gesagt, unter Windows 2000 nicht sofort, sondern erst beim ab-/anmelden.

SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil, SPIF_SENDWININICHANGE);
  Mit Zitat antworten Zitat
ReDoX
(Gast)

n/a Beiträge
 
#4

Re: Desktop aktualisieren

  Alt 4. Mai 2005, 14:54
Hi,
versuche es mal mit:
Delphi-Quellcode:
uses
  ShlObj;

procedure RefreshDesktop1;
begin
  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;
oder mit:

Delphi-Quellcode:

procedure RefreshDesktop2;
var
  hDesktop: HWND;
begin
  hDesktop := FindWindowEx(FindWindowEx(FindWindow('Progman', 'Program Manager'), 0,
    'SHELLDLL_DefView', ''), 0, 'SysListView32', '');
  PostMessage(hDesktop, WM_KEYDOWN, VK_F5, 0);
  PostMessage(hDesktop, WM_KEYUP, VK_F5, 1 shl 31);
end;
Mfg ReDoX
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Desktop aktualisieren

  Alt 4. Mai 2005, 15:09
Danke, doch funktionieren beide Möglichkeiteh nicht einmal unter Windows XP.
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

Re: Desktop aktualisieren

  Alt 4. Mai 2005, 15:11
Kann man da nicht irgendwo ein refresh reinsetzen, oder ein update?

MfG
freak
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Desktop aktualisieren

  Alt 4. Mai 2005, 15:13
Zitat von freak4fun:
Kann man da nicht irgendwo ein refresh reinsetzen, oder ein update?
Was meinst du damit genau?

InvalidateRect(0,nil,true); aktualisiert ja bei den meisten Windows Versionen den Desktop.
  Mit Zitat antworten Zitat
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#8

Re: Desktop aktualisieren

  Alt 4. Mai 2005, 15:13
Delphi-Quellcode:
function ChangeWallpaper(aFile: String): Boolean;
const
  CLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}';
var
  hObj: IUnknown;
  ADesktop: IActiveDesktop;
  wstr: PWideChar;
begin
  hObj := CreateComObject(CLSID_ActiveDesktop);
  ADesktop := hObj as IActiveDesktop;
  wstr := AllocMem(MAX_PATH);
  try
    StringToWideChar(aFile, wstr, MAX_PATH);
    ADesktop.SetWallpaper(wstr, 0);
    ADesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
  finally
    FreeMem(wstr);
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Desktop Hintergrund ändern und aktualisieren

  Alt 4. Mai 2005, 15:22
Danke, nur geht der Code nicht unter Win 9x, da dort kein Active Desktop unterstützt wird.

Hier der komplette Code, der geht nun unter XP auch nicht mehr, obwohl ich nichts verändert habe.

Delphi-Quellcode:
procedure TForm1.ChangeWallpaper(sWallPaperBMPPath: string; bTile: Boolean);
var
  reg: TRegIniFile;
begin
  reg := TRegIniFile.Create('Control Panel\Desktop');
  try
    with reg do
    begin
      WriteString('', 'Wallpaper', sWallPaperBMPPath);
      WriteString('', 'TileWallpaper', IntToStr(Ord(bTile)));
    end;
  finally
    FreeAndNil(reg);
  end;
  SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil, SPIF_SENDWININICHANGE);

  //Desktop aktualisieren
  InvalidateRect(0,nil,true);
end;
Nachtrag: Der Code lässt das Hintergrundbild verschwinden und macht ihn einfarbig, komisch.
Nachtrag 2: Ok, das lag an einer anderen Stelle im Programm, also das geht unter XP doch. Das Problem mit der Aktualisierung unter Win 2000 besteht jedoch weiterhin
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#10

Re: Desktop Hintergrund ändern und aktualisieren

  Alt 4. Mai 2005, 15:53
Zitat von Matze:
Danke, nur geht der Code nicht unter Win 9x, da dort kein Active Desktop unterstützt wird.
Sagt wer? Klar gibt es den Active Desktop auch unter 9x, allerdings ist er vom IE4 abhängig, der speziell bei Windows 95 installiert sein muss. Ab Windows 98 war der IE4 standardmäßig dabei.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz