代码如下:
Reg:=Tregistry.Create;{创建Tregistry对象的实例}
Reg.Rootkey:= Hkey_Current_User;{设置根键名称}
if Reg.OpenKey('Control Panel\Desktop',False) then {打开Control Panel\Desktop 路径对应的主键}
begin
Reg.WriteString('TileWallPaper','0');
Reg.WriteString('Wallpaper',dskHtmlFile);{向TileWallpaper 和Wallpaper串覆盖写入新值}
Reg.WriteString('ConvertedWallpaper',dskHtmlFile);
Systemparametersinfo(SPI_SETDESKWallpaper,0,Nil,SPIF_SendChange);{向Windows发送消息,通知Windows更换壁纸}
Reg.CloseKey;{将更改内容写入注册表并关闭}
end;
Reg.Free;
Reg:=Tregistry.Create;{创建Tregistry对象的实例}
Reg.Rootkey:= Hkey_Current_User;{设置根键名称}
if Reg.OpenKey('Control Panel\Desktop',False) then {打开Control Panel\Desktop 路径对应的主键}
begin
Reg.WriteString('TileWallPaper','0');
Reg.WriteString('Wallpaper',dskHtmlFile);{向TileWallpaper 和Wallpaper串覆盖写入新值}
Reg.WriteString('ConvertedWallpaper',dskHtmlFile);
Systemparametersinfo(SPI_SETDESKWallpaper,0,Nil,SPIF_SendChange);{向Windows发送消息,通知Windows更换壁纸}
Reg.CloseKey;{将更改内容写入注册表并关闭}
end;
Reg.Free;
Systemparametersinfo(SPI_SETDESKWallpaper,0,PChar(dskHtmlFile),SPIF_SendChange);
Uses ShlObj, ComObj;Procedure TFrmMain.SetWallPaper(StrFile: String; Style: Integer);
Var DT: IActiveDesktop;
WPO: TWallpaperOpt;
WS: WideString;
Begin
DT := CreateComObject(CLSID_ActiveDesktop) As IActiveDesktop;
WS := StrFile;
Case Style Of
0: WPO.dwStyle := WPSTYLE_CENTER; {居中}
1: WPO.dwStyle := WPSTYLE_TILE; {平铺}
2: WPO.dwStyle := WPSTYLE_STRETCH; {拉伸}
Else WPO.dwStyle := WPSTYLE_CENTER;
End;
WPO.dwSize := SizeOf(WPO);
DT.SetWallpaperOptions(WPO, 0);
DT.SetWallPaper(PwideChar(WS), 0);
DT.ApplyChanges(AD_APPLY_ALL);
End;
最上面得代码我也试过 的确是设置过了 但是却没立即更新墙纸
看桌面属性能看到改后得设置 就是没立即更新 奇怪!
通过Systemparametersinfo(SPI_SETDESKWallpaper,0,PChar(dskHtmlFile),SPIF_SendChange);是可以将HTML设置为桌面的,仅仅在WIN98下可以实现,至于不能立即显示,是因为没有加上刷新桌面的代码。但是在WIN2K和WINXP下设置完后却不能立即呈现,刷新桌面也没有用。可以在桌面属性中看到HTML已经作为桌面了,但没有被应用。请问哪位高手能解决这个问题。
Var DT: IActiveDesktop;
WPO: TWallpaperOpt;
WS: WideString;
Begin
DT := CreateComObject(CLSID_ActiveDesktop) As IActiveDesktop;
WS := StrFile;
Case Style Of
0: WPO.dwStyle := WPSTYLE_CENTER; {居中}
1: WPO.dwStyle := WPSTYLE_TILE; {平铺}
2: WPO.dwStyle := WPSTYLE_STRETCH; {拉伸}
Else WPO.dwStyle := WPSTYLE_CENTER;
End;
WPO.dwSize := SizeOf(WPO);
DT.SetWallpaperOptions(WPO, 0);
DT.SetWallPaper(PwideChar(WS), 0);
DT.ApplyChanges(AD_APPLY_ALL);
End;
经过试验可以得出,HTM也是可以做为桌面的,但HTM文件设置为桌面后会被系统自动修改,增加一些代码,生成文件名为"Desktop.htt"的文件,存放在%USERPROFILE%\Application Data\Microsoft\Internet Explorer下面,但是如果要让桌面能够显示,还必须把桌面设置为支持活动桌面
以下是htm文件被转换后的例子
<head><BASE HREF="http://127.0.0.1:8080/client/test1.html">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head><body>
<p>测试文件1</p>
<p><img src="http://127.0.0.1:8080/Client/Images/za.gif" width="298" height="72" /></p>
<OBJECT
classid="clsid:72267F6A-A6F9-11D0-BC94-00C04FB67863"
id=ActiveDesktopMover
STYLE="position:absolute; container:positioned; LEFT: 0;TOP: 0; WIDTH: 0; HEIGHT: 0;zIndex: 5"
>
<param name="Interval" value=500>
<param name="SizerID" value="ActiveDesktopMover">
<param name="Enabled" value="True">
<param name="TargetName" value="DeskMovr">
<param name="WindowOnly" value="False">
</OBJECT><OBJECT
classid="clsid:72267F6A-A6F9-11D0-BC94-00C04FB67863"
id=ActiveDesktopMoverW
STYLE="position:absolute; container:positioned; LEFT: 0;TOP: 0; WIDTH: 0; HEIGHT: 0;zIndex 19"
>
<param name="Interval" value=500>
<param name="SizerID" value="ActiveDesktopMoverW">
<param name="Enabled" value="True">
<param name="TargetName" value="DeskMovrW">
<param name="WindowOnly" value="True">
</OBJECT></body></html>