天天看點

在Unicode版Inno Setup中使用ISSkin給安裝程式添加皮膚

在Unicode版Inno Setup中使用ISSkin給安裝程式添加皮膚

ISSkin是Code jock 公司出品的Inno Setup 皮膚插件,用于為Inno制作的安裝程式提供皮膚功能。

自Delphi釋出2009之後,Inno Setup 開始出現支援Unicode編碼的版本,即5.3.x系列,并且官方同時提供Ansi和Unicode版本。

如果了解Delphi 2009的朋友,應該就很了解這一版本對Unicode的支援,這裡不多做介紹了。

Unicode版的Inno Setup腳本中會将所有字元串存儲為Unicode字元串,使用雙位元組編碼,包括ASCII碼,如果調用為早期Ansi版開發的插件的話,涉及到字元串 String,應該顯式修改為AnsiString,這樣才能保證Unicode字元串正确轉換為Ansi字元串。

這裡要解決由此而導緻的問題。

現在的ISSkin最新版本是2.0.0,字元串使用Ansi編碼,是以需要将官方首頁上介紹的Code代碼段進行修改。

這裡介紹使用ISSkin對Unicode版的Inno Setup制作的安裝程式添加皮膚。

第一步,在File段添加插件ISSkin的動态連結庫ISSkin.dll和皮膚檔案

例如:

[Files]

Source: ISSkin.dll; DestDir: {app}; Flags: dontcopy

Source: Office2007.cjstyles; DestDir: {tmp}; Flags: dontcopy

第二步,在Code段聲明API,注意這裡将原String修改為AnsiString

[Code]

procedure LoadSkin(lpszPath: AnsiString; lpszIniFileName: AnsiString);external 'LoadSkin@files:isskin.dll stdcall';

procedure UnloadSkin();external 'UnloadSkin@files:isskin.dll stdcall';

function ShowWindow(hWnd: Integer; uType: Integer): Integer;

external '[email protected] stdcall';

第三步,重載InitializeSetup和DeinitializeSetup兩個函數以調用ISSkin插件功能

procedure DeinitializeSetup();

begin

   ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);

   UnloadSkin();

end;

好了,現在截個圖吧,看看效果。

在Unicode版Inno Setup中使用ISSkin給安裝程式添加皮膚