下面是我的程序,我在程序中设置后墙纸不会立即改变,重启系统后才会看到效果。怎样才能设置后就看到效果呢?
//设置桌面壁纸
procedure TFMain.SetWallPaper(Sender:TObject);
var
Reg:TRegistry;
Item:TListItem;
begin
Item:=ListView.Selected;
if Item=nil then
begin
ShowMessage('请选择要设置成桌面背景的图片!');
Exit;
end;
Reg:=TRegistry.Create;
Reg.RootKey:=HKey_Current_User;
Reg.OpenKey('Control Panel\Desktop',false);
//居中
if Sender=MICenter then
begin
Reg.WriteString('TileWallpaper','0');
Reg.WriteString('WallpaperStyle','0');
end
//平铺
else if Sender=MITile then
begin
Reg.WriteString('TileWallpaper','1');
Reg.WriteString('WallpaperStyle','0');
end
//拉伸
else if Sender=MIFull then
begin
Reg.WriteString('TileWallpaper','0');
Reg.WriteString('WallpaperStyle','2');
end;
//改变图片
Reg.WriteString('Wallpaper',Item.SubItems[2]+Item.Caption);
Reg.CloseKey;
Reg.Free;
inherited;
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,nil,SPIF_SENDCHANGE);
end;
//设置桌面壁纸
procedure TFMain.SetWallPaper(Sender:TObject);
var
Reg:TRegistry;
Item:TListItem;
begin
Item:=ListView.Selected;
if Item=nil then
begin
ShowMessage('请选择要设置成桌面背景的图片!');
Exit;
end;
Reg:=TRegistry.Create;
Reg.RootKey:=HKey_Current_User;
Reg.OpenKey('Control Panel\Desktop',false);
//居中
if Sender=MICenter then
begin
Reg.WriteString('TileWallpaper','0');
Reg.WriteString('WallpaperStyle','0');
end
//平铺
else if Sender=MITile then
begin
Reg.WriteString('TileWallpaper','1');
Reg.WriteString('WallpaperStyle','0');
end
//拉伸
else if Sender=MIFull then
begin
Reg.WriteString('TileWallpaper','0');
Reg.WriteString('WallpaperStyle','2');
end;
//改变图片
Reg.WriteString('Wallpaper',Item.SubItems[2]+Item.Caption);
Reg.CloseKey;
Reg.Free;
inherited;
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,nil,SPIF_SENDCHANGE);
end;
SPIF_UPDATEINIFILE Writes the new system-wide parameter setting to the user profile.
SPIF_SENDCHANGE Broadcasts the WM_SETTINGCHANGE message after updating the user profile.
SPIF_SENDWININICHANGE Same as SPIF_SENDCHANGE.