做个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,测试一下卸载功能是否正常。