ISSkin是Code jock 公司出品的Inno Setup 皮膚插件,用於爲Inno製做的安裝程序提供皮膚功能。 app
自Delphi發佈2009以後,Inno Setup 開始出現支持Unicode編碼的版本,即5.3.x系列,而且官方同時提供Ansi和Unicode版本。 函數
若是瞭解Delphi 2009的朋友,應該就很瞭解這一版本對Unicode的支持,這裏很少作介紹了。 post
Unicode版的Inno Setup腳本中會將全部字符串存儲爲Unicode字符串,使用雙字節編碼,包括ASCII碼,若是調用爲早期Ansi版開發的插件的話,涉及到字符串String,應該顯式修改成AnsiString,這樣才能保證Unicode字符串正確轉換爲Ansi字符串。 this
這裏要解決由此而致使的問題。 編碼
如今的ISSkin最新版本是2.0.0,字符串使用Ansi編碼,因此須要將官方主頁上介紹的Code代碼段進行修改。 spa
這裏介紹使用ISSkin對Unicode版的Inno Setup製做的安裝程序添加皮膚。 插件
第一步,在File段添加插件ISSkin的動態連接庫ISSkin.dll和皮膚文件code
例如:blog
[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 'ShowWindow@user32.dll stdcall';
第三步,重載InitializeSetup和DeinitializeSetup兩個函數以調用ISSkin插件功能
例如:
procedure DeinitializeSetup(); begin ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0); UnloadSkin(); end;
好了,如今截個圖吧,看看效果。