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 'ShowWindow@user32.dll stdcall';
第三步,重載InitializeSetup和DeinitializeSetup兩個函數以調用ISSkin插件功能
例如:
procedure DeinitializeSetup(); begin ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0); UnloadSkin(); end;
好了,現在截個圖吧,看看效果。
![]() |
不含病毒。www.avast.com |