先修改注册表:
  Reg:=TRegistry.Create;
  try
  begin
    if Reg.OpenKey('Control Panel\DeskTop',false) then
    begin
      //       TileWallpaper    WallPaperStyle
      //居中       0                 0
      //平铺       1                 0
      //拉伸       0                 2
      if ListView1.Items[CurrentWallpaper].SubItems[1]='居中' then
      begin
        TileWallpaper:=0;
        WallPaperStyle:=0;
      end
      else if ListView1.Items[CurrentWallpaper].SubItems[1]='平铺' then
           begin
             TileWallpaper:=0;
             WallPaperStyle:=2;
           end
           else
           begin
             TileWallpaper:=0;
             WallPaperStyle:=2;
           end;      Reg.WriteString('TileWallPaper',IntToStr(TileWallpaper));
      Reg.WriteString('WallPaperStyle',IntToStr(WallPaperStyle));
      Reg.WriteString('WallPaper',ListView1.Items[CurrentWallpaper].SubItems[0]);
    end;
    Reg.CloseKey;
  end;
  finally
    Reg.Free;
  end;然后:
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,nil,SPIF_SENDCHANGE);

解决方案 »

  1.   

    WallPaper键值就是墙纸的文件路径了
      

  2.   

    我的源程序如下:procedure ChangeWallPaper(FileName: String; TileWP: AlignEnum);
    var
      ImageFileType: String;
      WinDirWPFile: PChar;
      WinDirLen: integer;
      myReg: TRegistry;
    begin
      WinDirWPFile := StrAlloc(256);       //get the windows dir
      WinDirLen := GetWindowsDirectory(WinDirWPFile, 0);
      GetWindowsDirectory(WinDirWPFile, WinDirLen);
      StrCat(WinDirWPFile, '\');
      StrCat(WinDirWPFile, wpFilename);
      SetFileAttributes(WinDirWPFile, FILE_ATTRIBUTE_NORMAL);  ImageFileType := Uppercase(ExtractFileExt(FileName));
      if ImageFileType = '.JPG'
         then Jpg2Bmp(FileName, WinDirWPFile)         //jpeg
         else if ImageFileType = '.BMP'
           then copyfile(FileName, WinDirWPFile);     //bmp  myReg := TRegistry.Create;
      myReg.OpenKeyReadOnly('Control Panel\Desktop');
      myReg.WriteString('Wallpaper', WinDirWPFile);
      myReg.WriteString('TileWallpaper', IntToStr(TileWP - 1));
      myReg.Free;
      SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, WinDirWPFile, SPIF_SENDCHANGE); //chaged WallPaper
      StrDispose(WinDirWPFile);
    end;
      

  3.   

    这样用SystemParametersInfo:
      SystemParametersInfo(SPI_SETDESKWALLPAPER,
                            0,
                            'c:\yourbmp.bmp',
                            SPIF_UPDATEINIFILE or SPIF_SENDWININICHANGE);
      

  4.   

    谢谢各位,guig(胖胖)的方法解决了问题。