做个Flash桌面安装程序

IT商界

  帮朋友制作Flash活动桌面墙纸的安装程序,因为要求在复制必要文件到用户机器后,能使安装的墙纸即刻成为当前活动桌面墙纸,而无须用户手工设置。这个要求单靠修改注册表是无法实现的,因此先用Delphi写了个即刻设置活动桌面墙纸的小程序,然后在安装程序制作软件中调用这个小程序,以实现所要求的功能。

  对程序的考虑

  考虑到尽可能地缩小安装包,决定采用控制台应用程序来实现墙纸设置功能。所谓控制台应用程序(Console Application)即没有自己的图形用户界面的字符模式应用程序,它们的输入输出通过控制台窗口(即Win9X中的MS-DOS窗口或Win2000中的命令提示符窗口),但它们并不是DOS程序,而是实实在在的Winodows程序。控制台应用程序主要优点在于编写简单、编译生成的文件小,很适合不需与用户做太多交互的小程序、小工具。

  而活动桌面是从IE 4.0开始引入的一项技术,通过它,使得IE与Windows操作系统结合得更加紧密,它允许我们直接包含HTML文档到桌面,那么在HTML文档中嵌入Flash影像、音、视频剪辑、ActiveX控件和Java小程序等各种对象,加入DHTML代码,一个五彩缤纷、动感十足的桌面就呈现在你面前了。

  开始做程序

  好了,现在我们就开始在Delphi中创建一个控制台应用程序,并在其中实现活动桌面墙纸的设置功能。

  启动Delphi,选择File→New→Other...菜单(或工具栏上的New Items按钮),在New Items对话框的New标签页中,双击Console Application图标,新建一个控制台应用程序,按“CTRL+A、Delete”键,清空Delphi生成的内容,将以下源码输入到文件中,并保存为adwpset.dpr文件。

  // Active Desktop Wallpaper Setup Program

  // 活动桌面墙纸设置程序

  program adwpset;

  {$APPTYPE CONSOLE}

  uses

  SysUtils, Windows,ActiveX, ComObj, ShlObj;

  // 活动桌面墙纸设置过程

  // 作用:安装或卸载活动桌面墙纸

  // 参数:sAction -执行动作,‘install’(安装)或‘uninstall’(卸载)

  // filename - 墙纸文件名,可是图片或HTML文档应包含完整路径

  procedure SetActiveDesktopWallpaper(sAction, filename: string);

  const

  CLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097D EACF9}';

  var

  ActiveDesktop: IActiveDesktop;

  buf: array[0..MAX_PATH-1] of WideChar;

  pco: TComponentsOpt;

  begin

  ActiveDesktop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesk top;

  if sAction = 'install' Then // 安装墙纸

  begin

  pco.dwSize := sizeof(TCompo nentsOpt);

  // 获取桌面选项

  ActiveDesktop.GetDesktopItemOptions(pco, 0);

  // 显示桌面图标

  // pco.fEnableComponents := True;

  // 在活动桌面上显示Web内容

  pco.fActiveDesktop := True;

  // 设置桌面选项

  ActiveDesktop.SetDesktopItemOptions(pco, 0);

  // 设置墙纸

  ActiveDesktop.SetWallpaper(String ToWideChar(filename, buf, MAX_PATH),0);

  end

  else if sAction = 'uninstall' then // 卸载墙纸

  begin

  // 获取当前桌面墙纸

  ActiveDesktop.GetWallpaper(buf, MAX_PATH, 0);

  // 比较当前桌面墙纸与要卸载的桌面墙纸是否相同

  if AnsiSameText(WideCharToString(buf), filename) Then

  begin

  // 卸载桌面墙纸

  ActiveDesktop.SetWallpaper('', 0);

  end;

  end;

  // 使改变生效

  ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_ FORCE);

  end;

  var

  sActionParam: string;

  bShowUsage: boolean;

  begin

  bShowUsage := True;

  WriteLn('Active Desktop Wallpaper Setup Console Application.');

  WriteLn('Written by WenWei, 2003.');

  // 参数数目检测

  if ParamCount = 2 Then

  begin

  sActionParam := LowerCase(ParamStr(1));

  // 动作参数检测

  if (sActionParam = 'install') or (sAc tionParam = 'uninstall') then

  begin

  bShowUsage := False;

  CoInitialize(nil);

  // 设置活动桌面墙纸

  SetActiveDesktopWallpaper(sAction Param, ParamStr(2));

  CoUninitialize;

  end;

  end;

  If bShowUsage Then

  begin

  WriteLn('Usage: adwpset install|unin stall filename');

  ReadLn;

  end;

  end.

  测 试

  接下来,我们就可以测试了。选择 Run→Parameters,在弹出对话框的Local标签页的Parameters文本框中输入参数:install"c:\my wallpaper\wallpaper1.html"。注意:路径包含空格的,应用双引号把它括起来,点OK按钮关闭对话框。按F9运行,看看,是不是指定的HTML文档已经设置成当前桌面墙纸了?然后再将动作参数install改成uninstall,测试一下卸载功能是否正常。