Change the
desktop wallpaper
Author:
Simon Grossenbacher
Homepage:
http://www.swissdelphicenter.ch
// 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;