Mega Code Archive

 
Categories / Delphi / System
 

How to change the desktop wallpaper

Title: How to change the desktop wallpaper // 1.Way: uses Registry; procedure SetWallpaper(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 reg.Free; end; SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil, SPIF_SENDWININICHANGE); end; // 2. Way: procedure TForm1.Button1Click(Sender: TObject); var sWallPaperBMPPath: string; begin sWallPaperBMPPath := 'C:\[WinDIR]\wall.bmp'; if not SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, Pointer(sWallPaperBMPPath), SPIF_SENDWININICHANGE) then ShowMessage('Succesful.') else ShowMessage('Failed!'); end; // 3. Set the wallpaper for the Active Desktop. { You may have noticed that using SystemParametersInfo to change the wallpaper when ActiveDesktop is turned on doesn't work. The reason is because you need to use the IActiveDesktop COM interface. Using SystemParametersInfo still works, but it doesn't update the wallpaper. Requires Internet Explorer 4.0 or later). } uses ShlObj, ComObj; function ChangeWallpaper(aFile: String): Boolean; const CLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}'; var hObj: IUnknown; ADesktop: IActiveDesktop; str: string; 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;