设为首页 |收藏本站 |切换到宽版
 找回密码

NSIS中文论坛

查看: 790|回复: 0
收起左侧

[教程] 【自制】innosetup最简单的样例——随机皮肤

[复制链接]
  • TA的每日心情
    开心
    2019-9-12 14:51
  • 签到天数: 1 天

    [LV.1]初来乍到

    1

    主题

    4

    帖子

    18

    积分

    积分
    18
    发表于 2019-9-12 19:48:30 | 显示全部楼层 |阅读模式
    IsSkin是一款比较老的INNO插件,他可以让innosetup安装界面加载出绚丽的皮肤,不过会有同学问到:skygz制作的安装包每一次运行时候显示的皮肤都不一样,是怎么做到的呢,今天我们来仿一下他的脚本。

    本帖只展示[code]段的写法,其他部分略,建议先学好innosetup和delphi的基础知识再看本帖。
    第一步,打包皮肤文件,设置属性为临时文件,命名格式为0.cjstyles、1.cjstyles、2.cjstyles以此类推...


    第二步:声明isskin.dll所提供的API应用接口
    [mw_shl_code=delphi,true]// 调用isskin.dll的LoadSkin函数
    procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
    external 'LoadSkin@files:isskin.dll stdcall';

    // 调用isskin.dll的UnloadSkin函数
    procedure UnloadSkin();
    external 'UnloadSkin@files:isskin.dll stdcall';

    // 调用isskin.dll的ShowWindow函数
    function ShowWindow(hWnd: Integer; uType: Integer): Integer;
    external 'ShowWindow@user32.dll stdcall';[/mw_shl_code]

    第三步,让安装程序的初始化函数把皮肤加载出来。这里我们开始写随机加载皮肤的操作了。
    [mw_shl_code=delphi,true]function InitializeSetup(): Boolean;//加载皮肤
    var
    skin: string;//皮肤的随机ID
    begin
      skin:=IntToStr(Random(19)+1);//随机列举一个0-19的整数,然后+1,这样做是因为如果抽中了21.cjstyles会造成安装程序找不到这个文件,从而导致强退。或者直接写成skin:=IntToStr(Random(19)+1);
    ExtractTemporaryFile(Skin+'.cjstyles');//根据随机生成的ID去解压临时文件。
    LoadSkin(ExpandConstant('{tmp}\'+Skin+'.cjstyles'), '');//根据随机生成的ID去加载临时文件。

    Result := True;
    end;[/mw_shl_code]

    最后,结束或取消安装的时候卸掉皮肤
    [mw_shl_code=delphi,true]procedure DeinitializeSetup();//卸载皮肤
    begin
    ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
    UnloadSkin();
    end;[/mw_shl_code]卸载掉皮肤

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|联系我们|鲁ICP备12005273号 |  

    © 2015-2020 nsisfans.com.   All Rights Reserved.

    快速回复 返回顶部 返回列表