我因为无聊,所以写个定时更新墙纸的小东东,
可网上广为流传的两种方式都没用,至少不能立即更新。下面贴出代码,希望大家指正:1:
procedure setwallpaper(fileName:String);
var
Reg:Tregistry;
begin
Reg:=Tregistry.Create;
Reg.RootKey:=HKey_Current_User;
Reg.OpenKey('Control Panel\Desktop',False);
Reg.WriteString('TileWallPaper','0');//改为('TileWallPaper','1')平铺
Reg.WriteString('WallPaper',fileName);
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,nil,SPIF_SendChange);
Reg.CloseKey;
Reg.Free;
end;2:
procedure setwallpaper(fileName:String);
begin
{调用API函数SystemParametersInfo来设置桌面墙纸的图片文件为'c:\windows\mywallpaper.bmp'}
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0,Pchar(fileName), SPIF_UPDATEINIFILE);
end;
可网上广为流传的两种方式都没用,至少不能立即更新。下面贴出代码,希望大家指正:1:
procedure setwallpaper(fileName:String);
var
Reg:Tregistry;
begin
Reg:=Tregistry.Create;
Reg.RootKey:=HKey_Current_User;
Reg.OpenKey('Control Panel\Desktop',False);
Reg.WriteString('TileWallPaper','0');//改为('TileWallPaper','1')平铺
Reg.WriteString('WallPaper',fileName);
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,nil,SPIF_SendChange);
Reg.CloseKey;
Reg.Free;
end;2:
procedure setwallpaper(fileName:String);
begin
{调用API函数SystemParametersInfo来设置桌面墙纸的图片文件为'c:\windows\mywallpaper.bmp'}
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0,Pchar(fileName), SPIF_UPDATEINIFILE);
end;
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;