![]() |
Desktop Hintergrund ändern und aktualisieren
Hallo!
Bisher habe ich den Desktop mittels
Delphi-Quellcode:
aktualisiert, was eigentlich auch recht gut funktioniert.
InvalidateRect(0,nil,true);
Ä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? |
Re: Desktop aktualisieren
Wenn du das Hintergrundbild über SetSystemParametersInfo (oder so ähnlich) änderst, sollte die aktualisierung automatisch geschehen.
|
Re: Desktop aktualisieren
Genau damit ändere ich ihn, aber es geht, wie gesagt, unter Windows 2000 nicht sofort, sondern erst beim ab-/anmelden.
Delphi-Quellcode:
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil, SPIF_SENDWININICHANGE);
|
Re: Desktop aktualisieren
Hi,
versuche es mal mit:
Delphi-Quellcode:
oder mit:
uses
ShlObj; procedure RefreshDesktop1; begin SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil); end;
Delphi-Quellcode:
Mfg ReDoXprocedure 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; |
Re: Desktop aktualisieren
Danke, doch funktionieren beide Möglichkeiteh nicht einmal unter Windows XP. :?
|
Re: Desktop aktualisieren
Kann man da nicht irgendwo ein refresh reinsetzen, oder ein update?
MfG freak |
Re: Desktop aktualisieren
Zitat:
Delphi-Quellcode:
aktualisiert ja bei den meisten Windows Versionen den Desktop.
InvalidateRect(0,nil,true);
|
Re: Desktop aktualisieren
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; |
Re: Desktop Hintergrund ändern und aktualisieren
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. :gruebel:
Delphi-Quellcode:
Nachtrag: Der Code lässt das Hintergrundbild verschwinden und macht ihn einfarbig, komisch.
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 2: Ok, das lag an einer anderen Stelle im Programm, also das geht unter XP doch. :oops: Das Problem mit der Aktualisierung unter Win 2000 besteht jedoch weiterhin |
Re: Desktop Hintergrund ändern und aktualisieren
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz