图片我从网络上找来的
先贴代码 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:\下去又可以直接应用的...奇怪啊~~~
先贴代码 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:\下去又可以直接应用的...奇怪啊~~~
ConvertedWallpaper读取这个路径!!
这个有局限性,别的图片格式就没辙了,最佳的方法是调用COM对象。
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图片
有人不服气出来说了:为啥我电脑可以用 JPG 格式甚至可以用 PNG 格式的图片背景呢?!
嗯,别急,你如果能打开 你的系统这个文件
Z:\Documents and Settings\XXXX\Local Settings\Application Data\Microsoft\Wallpaper1.bmp;其中:
Z: 盘符是指向你的系统所在的分区;
XXXX 是当前登录的用户名。而且,具体更换桌面背景过程是:首先删除这个 Wallpaper1.bmp ,然后新建 Wallpaper1.bmp,再然后将其他格式的图片转为 BMP,写入到这个 Wallpaper1.bmp,最后通知系统更新桌面背景。
确实只支持BMP格式,你只看了结果却忘了过程,难道系统不是自己把JPG、PNG这些转换成BMP格式的么? 如果都需要我们自己转换格式再设置成壁纸,这代码写出来岂不是个笑话,呵呵。
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');