代码如下:
 
 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;

解决方案 »

  1.   

    更换桌面壁纸:Systemparametersinfo(SPI_SETDESKWallpaper,0,PChar('c:\1.bmp'),SPIF_SendChange);
      

  2.   

    在你这里应该改成:
    Systemparametersinfo(SPI_SETDESKWallpaper,0,PChar(dskHtmlFile),SPIF_SendChange);
      

  3.   

    还是不行啊,奇怪!我这个桌面文件是一个.html的页面。
      

  4.   

    dskHtmlFile是htm文件?你想用htm文件来做壁纸?
      

  5.   


    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;
      

  6.   

    IActiveDesktop 是什么东西?用不了啊 uses引用什么
    最上面得代码我也试过 的确是设置过了 但是却没立即更新墙纸 
    看桌面属性能看到改后得设置 就是没立即更新 奇怪!
      

  7.   

    墙纸是不能用html的,html可以作为活动桌面。
      

  8.   

    我也在琢磨这个问题,因为通过WINDOWS的桌面设置是可以将HTML文件设置为桌面的,不需要使用ACTIVEDESKTOP,使用ACTIVEDESKTOP设置的网页会给使用带来不便。
    通过Systemparametersinfo(SPI_SETDESKWallpaper,0,PChar(dskHtmlFile),SPIF_SendChange);是可以将HTML设置为桌面的,仅仅在WIN98下可以实现,至于不能立即显示,是因为没有加上刷新桌面的代码。但是在WIN2K和WINXP下设置完后却不能立即呈现,刷新桌面也没有用。可以在桌面属性中看到HTML已经作为桌面了,但没有被应用。请问哪位高手能解决这个问题。
      

  9.   

    我运行这段怎么提示Class not registered?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;
      

  10.   

    html是不能作为桌面,只能作为活动桌面,建主楼主将自己的想法弄清楚,然后再想办法.
      

  11.   

    这些天我也在考虑这个问题
    经过试验可以得出,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>