图片我从网络上找来的
先贴代码  DownloadFile('http://res2.windows.microsoft.com/resbox/en/Windows%207/main/a983f037-4e8a-4e40-9a2c-bac074ddfd24_6.jpg', 'C:\Wallpaper1.jpg');
  OpenDialog1.FileName := 'C:\Wallpaper1.jpg';
  Reg := Tregistry.Create;
  Reg.Rootkey := Hkey_Current_User;
  Reg.OpenKey('Control Panel\Desktop', False);
  Reg.WriteString('TileWallPaper', '0');
  Reg.WriteString('Wallpaper','C:\Wallpaper1.jpg');
  Systemparametersinfo(SPI_SETDESKWallpaper, 0, nil, SPIF_SendChange);
  Reg.CloseKey;
  Reg.Free;我调用DownloadFile可以把文件下载到本地.打开也可以浏览,正常的
问题在我程序已经设置了背景,但是背景显示蓝色,我用打开属性或属性->桌面的缩略图都可以看到我下载来的图,我需要在属性->桌面选择其他在选择回来在应用一下背景才会改回我所载下来的..图片大小是2M多WINDOWS下桌面设置有没有什么要求的噢?但是我本地有些图片文件直接放到c:\下去又可以直接应用的...奇怪啊~~~

解决方案 »

  1.   

    [HKEY_CURRENT_USER\Control Panel\Desktop]
    ConvertedWallpaper读取这个路径!!
      

  2.   

    设置背景不需要写注册表,有现成的一个api,不过它只支持bmp类型的。
      

  3.   

    我现在用ps生成的bmp放到C:\Documents and Settings\***\Local Settings\Application Data\Microsoft这个下面,然后去设置背景试了几张图片都可以了,结贴了..
      

  4.   

    SystemParametersInfo(SPI_SETDESKWALLPAPER,1,pointer(pchar('c:\a.bmp')),0);
      

  5.   


    这个有局限性,别的图片格式就没辙了,最佳的方法是调用COM对象。
      

  6.   

    procedure SetDesktopFile(aFile : string);
      var Reg:Tregistry;
    begin
      Reg := TRegistry.Create;
      Reg.RootKey := HKEY_CURRENT_USER;
      Reg.OpenKey('Control Panel\Desktop',False);
      Reg.WriteString ('TileWallPaper','0');
      Reg.WriteString('Wallpaper',aFile);
      Reg.CloseKey;
      Reg.Free;
      Systemparametersinfo(SPI_SETDESKWallpaper,0,Nil,SPIF_SendChange);
    end;
    win7下测试正常,支持jpg图片
      

  7.   

    额,这个与图片格式毫无关系,XP 系统只支持 BMP 格式的桌面背景。
    有人不服气出来说了:为啥我电脑可以用 JPG 格式甚至可以用 PNG 格式的图片背景呢?!
    嗯,别急,你如果能打开 你的系统这个文件
    Z:\Documents and Settings\XXXX\Local Settings\Application Data\Microsoft\Wallpaper1.bmp;其中:
     Z: 盘符是指向你的系统所在的分区;
    XXXX 是当前登录的用户名。而且,具体更换桌面背景过程是:首先删除这个 Wallpaper1.bmp ,然后新建 Wallpaper1.bmp,再然后将其他格式的图片转为 BMP,写入到这个 Wallpaper1.bmp,最后通知系统更新桌面背景。
      

  8.   


    确实只支持BMP格式,你只看了结果却忘了过程,难道系统不是自己把JPG、PNG这些转换成BMP格式的么? 如果都需要我们自己转换格式再设置成壁纸,这代码写出来岂不是个笑话,呵呵。
      

  9.   

    帮楼主改了一下代码,没有测试,你自己测试一下,需要uses shlobj, ComObj;
    procedure SetWP(wp:string);
    var
      hObj: IUnknown;
      ADesktop: IActiveDesktop;
    begin
     begin
      hObj := CreateComObject(CLSID_ActiveDesktop);
      ADesktop := hObj as IActiveDesktop;
      ADesktop.SetWallpaper(PWideChar(WideString(wp)), 0);
      ADesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
     end;
    end;DownloadFile('http://res2.windows.microsoft.com/resbox/en/Windows%207/main/a983f037-4e8a-4e40-9a2c-bac074ddfd24_6.jpg', 'C:\Wallpaper1.jpg');
    SetWP('C:\Wallpaper1.jpg');
      

  10.   

    我也写了一个,编译好的程序和源码都在http://ymxu.ys168.com/,程序支持只JPG,BMP格式,在XP下测试通过能用,但还有一些小问题搞不懂,如果有下载的,下载完成后看看程序说明,顺便帮我解答一下啊,感激不尽。QQ:9966071
      

  11.   

    谢谢...我测试拿BMP好多都是可以的,部分是不行的,可能是我直接把JPG改BMP后缀的原因吧