在Delphi中设置墙纸及相关属性 陈翀伟 2000年 第23期   目前,已有不少的文章介绍了在Delphi中通过调用Win32 API函数SystemParametersInfo来动态设置Windows系统墙纸的方法。具体如下:   SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, FileName, SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE);   其中, FileName是墙纸文件名(包含全路径)。   这种方法的缺点在于仅能设置墙纸的内容,而无法将墙纸以“居中”,“平铺”和“拉伸”等不同方式显示出来。下面我将介绍如何通过直接修改Windows系统注册表来实现上述显示效果。   在系统注册表中,主键Desktop(注册表路径为HKEY_CURRENT_USER\Control Panel\Desktop)中包含与墙纸有关的几个项值。   其中,项值TileWallpaper用以控制墙纸是否以“平铺”方式显示。当其值为1时,以“平铺”方式显示。而当其值为0时,则以非“平铺”方式显示。   项值WallPaperStyle用以控制墙纸是否以“拉伸”方式显示。当其值为2时,以“拉伸”方式显示。而当其值为0时,则以非“拉伸”方式显示。   项值WallPaper中存放墙纸文件名(包含全路径)。   因此,只需通过正确设置上述项值,就可设置相应的墙纸的属性,此后再调用SystemParametersInfo(SPI_SETDESKWALLPAPER,0,nil,SPIF_SENDCHANGE)将注册表更新的消息进行广播即可使设置立即生效。   下面代码举例说明如何将“C:\A.BMP”设置为当前墙纸,并以“平铺”的方式显示出来。   procedure SetTitledWallPaper;   var   Registry: TRegistry;   begin   // 设置墙纸的属性   Registry := TRegistry.Create;   try   if Registry.OpenKey(′Control Panel\DeskTop′, False) then   begin   Registry.WriteString(′TileWallPaper′, ′1′); // 平铺方式,TileWallPaper为1   Registry.WriteString(′WallPaperStyle′, ′0′); // 非拉伸方式,WallPaperStyle为0   Registry.WriteString(′WallPaper′, ′C:\A.BMP′); // 墙纸文件的路径″C:\A.BMP″   end;   Registry.CloseKey;   finally   Registry.Free;   end;   //广播注册表改动的消息   SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil, SPIF_SENDCHANGE);   end;