请把轻狂志网址 www.flighty.cn 加入收藏夹,其他俱为假冒,谨防被骗!赞助请点 这里!找东东请用右边的搜索 ===>
05 2013-09

INNO:替换卸载程序图标的插件与例子

作者:zhfi | 发布:2010-02-08 | 更新:2013-09-05 | 分类:部署 | Disposition | 热度:
; Inno Setup 中替换卸载程序图标的插件与例子
; 编写: zhfi @ http://hi.baidu.com/zhfi1022/
; 特别感谢: 风铃夜思雨, Restools !
;注意: 替换卸载程序的图标,必须是在卸载程序生成之前!
;建议安装图标与卸载图标的格式与大小一致,否则可能会导致卸载程序出错!
;要替换图标的exe文件路径名称留空,则插件会自动替换掉Inno卸载程序的图标!
[Setup]
; 注意: AppId 的值是唯一识别这个程序的标志。
; 不要在其他程序中使用相同的 AppId 值。
; (在编译器中点击菜单“工具 -> 产生 GUID”可以产生一个新的 GUID)
AppId={{DC1559D2-A4CC-471F-8FDF-45F4278AFAEA}
AppName=Inno Setup 中替换卸载程序图标的例子
AppVerName=我的程序 1.5
AppPublisher=我的公司
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName=.\Uninst
DefaultGroupName=我的程序
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
SetupIconFile=Setup.ico
[Languages]
Name: "chinese"; MessagesFile: "compiler:Default.isl"
[Files]
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
;图标
Source: "uninst.ico"; Flags: solidbreak dontcopy
;插件
Source: "UpdateIcon.dll"; Flags: solidbreak dontcopy
[code]
//插件函数用法:
//参数: 句柄(插件错误对话框的父句柄), exe文件完整路径名称, (exe文件中要替换的)图标资源名称, 图标文件的完整路径名称, (exe中要替换的图标资源所在)语系
//返回值: 成功 = True, 失败 = False
function UpdateIcon(const hWnd: Integer; const exeFileName, exeIcon, IcoFileName: String; wlangID: DWORD): Boolean;
external 'UpdateIcon@files:UpdateIcon.dll stdcall';
//替换卸载程序的图标
function UpdateUninstIcon(const IcoFileName: String): Boolean;
begin
//  要替换图标的exe文件路径名称留空,则插件会自动替换掉Inno卸载程序的图标!其它参数类似!
  Result:= UpdateIcon(MainForm.Handle, '', '', IcoFileName, 0); //替换卸载图标
end;
procedure CurStepChanged(CurStep: TSetupStep);
var
  sIcon: String;
begin
//注意: 替换卸载程序的图标,必须是在卸载程序生成之前!
//建议安装图标与卸载图标的格式与大小一致,否则可能会导致卸载程序出错!
  if CurStep=ssInstall then
  begin
    sIcon:= ExpandConstant('{tmp}\uninst.ico'); //定义卸载图标
//  ExtractTemporaryFile('UpdateIcon.dll');
    ExtractTemporaryFile(ExtractFileName(sIcon)); //释放卸载图标
//  要替换图标的exe文件路径名称留空,则插件会自动替换掉Inno卸载程序的图标!
    if UpdateUninstIcon(sIcon) then  //替换卸载图标
      MsgBox('卸载程序图标 替换成功!', mbInformation, MB_OK)
    else MsgBox('卸载程序图标 替换失败!', mbError, MB_OK);
  end;
end;