在Unicode版Inno Setup中使用ISSkin

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;

好了,如今截個圖吧,看看效果。 

2009-10-27 11-51-51

 
 
 
 
相關文章
相關標籤/搜索