为什么更新了注册表后,桌面的墙纸不及时刷新?procedure TForm1.Button1Click(Sender: TObject);
var
  RegF:TRegistry;
begin
   RegF:=TRegistry.create;
   try
   RegF.RootKey := HKEY_CURRENT_USER;
   if RegF.OpenKey('\Control Panel\Desktop',TRUE) then        begin
                RegF.WriteString('Wallpaper','E:\CJ\壁纸\mura2.jpg');
                RegF.CloseKey;
        end;
    finally
    RegF.Free;
    end;
    SystemParametersinfo(SPI_SETDESKWALLPAPER,0,nil,3);
end;

解决方案 »

  1.   

    下面是我在壁纸小精灵中的一段代码
    //----------------------------------------------------------[ SetWallpaper ]---
    { 换壁纸核心代码 }
    procedure TMainForm.SetWallpaper(FileIndex: Integer);
    var 
      ADeskTop: IActiveDesktop;
      tempWideStr: WideString;
      wallpaper: PwideChar;
      tempImage: TImage;
      Error: Boolean;
    begin
      Error := False;
      tempWideStr := FileMemo.Lines.Strings[FileINdex];
      tempImage := TImage.Create(nil);
      try
        tempImage.Picture.LoadFromFile(FileMemo.Lines.Strings[FileINdex]);
      except
        Error := True;
      end;
      tempImage.Free;
      if Not Error then
      begin
        ADeskTop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;
        wallpaper := PwideChar(tempWideStr);
        ADeskTop.SetWallpaper(wallpaper,0);
        ADeskTop.ApplyChanges(AD_APPLY_ALL);
      end;
    end; {SetWallpaper}
      

  2.   

    uses
      ComObj, ShlObj;procedure TForm1.Button3Click(Sender: TObject);
    var
      ADeskTop:IActiveDesktop;
      wallpaper:PwideChar;
    begin
      ADeskTop:=CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;
      wallpaper:='D:\Picture\sc\zerg02.jpg';
      ADeskTop.SetWallpaper(wallpaper,0);
      ADeskTop.ApplyChanges(AD_APPLY_ALL);
    end;
      

  3.   

    SystemParametersInfo(SPI_SETDESKWALLPAPER,0,nil,SPIF_SENDWININICHANGE);