当前位置: 首页 > 工具软件 > NSIS > 使用案例 >

Nsis的自我理解

寿鸣
2023-12-01

Nsis 脚本语言的理解


1. Nsis 语言的理解

NSIS脚本语言比较独特,类似于宏汇编,语法有些像C语言,感觉是纯面向过程的东东。功能还算强大,能调用Windows API,支持用动态链接库形式的扩展。能调用和创建内核对象。例如可用用CreateMuteEx()用来创建单实例。此处深有体会。
2. 跟C语言的区别

C语言必须有一个_tmain()函数,并且仅有一个,而Nsis想对应过去就是 Section -- SectionEnd,必须最少有一个,可以有多个。

相同之处都是顺序执行。 在Nsis当中有 .onInit, .onGuiInit ... 等等好多类似的函数。这些函数在Section 之前执行。


3. 重点理解Page

page有点解释不清楚,但是可以肯定的是Page先先于Section 执行。 

4. 针对自己做的安装包贴图问题。

    我做的安装包的卸载过程没有加载贴图。原因自己分析下:自己安装安装包的过程是Page Custom test1, 自己定义的page,此处可以正常贴图。而在卸载的过程是自己写的Section Uninstall。自处调用Nsis默认的样子,即没有贴图的样子,如果需要贴图,还需要自己Load SKINSE. 

在Section Uninstall 片段当中调用

SkinSE_NSIS::setskinpath /NOUNLOAD "$PLUGINSDIR\QQ2011Skin.zip" 就实现了加载 QQ2010Skin.zip 当中的图片了。此处需要多说一下, SKINSE 既可以加载ZIP文件,也可以加载普通的。


  SKINSE支持两种皮肤配置方式。第一种:把所有皮肤资源配置在文件夹中;第二种:把所有皮肤资源打包成ZIP格式文件。这两种格式类型在VC版本中采用如下两宏定义:

#define SKINSE_SKIN_STYLE_FOLDER   0             //Load the skin resources from the folder

#define SKINSE_SKIN_STYLE_ZIP      1             //Load the skin resources from the ZIP 

呵呵。


5. 需要理解KillProcess问题,下面介绍。

    // 后续

6. 需要理解CreateMute()对应到NSIS也是一样的,需要理解

   // 后续

7. 继续深入理解SKINSE 的其中一个可以动态跟控件换贴图的优势。慢慢理解

  // 后续

 


什么是SKINSE?
SkinSE是一款真正意义上适合软件界面开发的C++界面库。采用XML管理GDI资源(如:图片、字体、颜色等),最大程度将界面与逻辑分开,让程序员有更多的时间去进行软件内部的逻辑处理。SKINSE扩展了非常丰富的API接口,兼容其他界面控件,使界面开发更加灵活、高效。SkinSE只用到了windows几个底层的核心库,没有用到(MFC/ATL等第三方库),采用纯API编写,采用C语言导出方式,增强可移植性,可以用于多种计算机语言。
SKINSE高级特性
1.SKINSE内部没有完全采用HOOK拦截窗口的机制,主要采用子类化控件,修改窗口过程函数的方式进行换肤。但是内置HOOK,可以动态设置HOOK,保证了SKINSE在整理构架上的灵活性。

2.SKINSE内置DirectUI绘制思想,将界面绘制元素抽象成图片、文本、矩形区域、线条、动画,并且内置EventItem、DrawItem绘制机制。可以将这些绘制元素以及绘制机制组合开发,实现按钮、单选框、复选框、分组框、Tab控件、动画控件等界面控件。

3.SKINSE提供了非常丰富的API接口,最大限度的让SKINSE界面库更加透明化、个性化,让SKINSE界面库的使用范围得到最大延伸。

4.SKINSE在子类化进行控件换肤的时候,尽量不修改控件的默认属性,最大程度地兼容window标准控件的默认属性。比如,目前市场上很多界面库在绘制窗口标题栏的时候,去掉了窗口的WS_CAPTION属性, 导致GetClientRect、GetWindowRect方法失效,从而加大了界面开发和设计的难度,当然也导致不能完美支持SDI/MDI等界面框架。

5.SKINSE提供了界面控件动态布局的特性。省去了程序开发中最为繁琐的窗口控件位置的调整。只需要调整一下XML配置属性,就可以进行完美布局。

6.SKINSE支持BMP、ICO、PNG、JPG等图片格式,支持皮肤色调变换,提供SKINSE内部的图像引擎接口。

7.SKINSE支持SDI、MDI等界面框架,支持20余种界面控件,完整兼容window 2000、window2003、window XP、vista、window7当前的主流操作系统。并且支持window平台的多种计算机语言开发。


 类似资料: