转自http://www.bangchui.net/viewthread.php?tid=75&extra=page%3D2
Install Shield 脚本语言是类似C语言,利用InstallShield的 向导 或模板都可以生成基本的脚本 程序 框架,可以在此基础上按自己的意愿进行修改和添加。一.基本语法规则
1.变量
BOOL 布尔型 值为TRUE(1)或FALSE(0)
CHAR 字符型 一字节长的(8bit)的字符
HWND 窗口句柄 用来存放窗口句柄
INT 整型 两字节长的整数
LIST 列表型 指向InstallShield列表,用ListCreate和ListDestroy
LONG 扩展数值型
LPSTR 扩展指针
NUMBER 数值型 存放四字节长的数值,范围从-2147483648到+2147483647
POINTER 指针型
SHORT 短数值型
STRING 字符串型 十分类似VC中的LPCTSTR
变量如同标准的C语言,在使用前需要事先声名。变量通常在两个位置进行声名,一是主程序外部,这样的变量为全局变量,二是各函数的变量声名区,这样的变量是局部变量。
2. 操作 符
一般的与C语言相同操作符,在这里不做详解,以下主要介绍比较特殊的操作符,
(1) + , - , * , /
以上四个操作符与C语言中意义和用法都相同。
(2) &&
与操作,与C语言中用法相同,例:x1 && x2
(3) ||
或操作,与C语言中用法相同,例:x1 || x2
(4) !
非操作,与C语言中用法相同,例:!x1
(5) *
指针操作,类似C语言中的*
(6) & , | , ^ , ~ , << , >>
分别为位与,位或,按位异或,按位取反,左移和右移,其意义和用法都与C语言中基本相同。
(7) .
该操作符用于结构,用来得到结构的子项,与Delphi的 . 用法类似,例如:
typedef SETTINGSREC
begin
BOOL bSwitchOn;
STRING szMssg[255];
INT nVal;
end;
SETTINGSREC settings;
program
settings.bSwitchOn = FALSE;
settings.szMssg = "Off";
settings.nVal = 0;
(8) =
既可作为赋值号,同时也做等于符,例如:
str1 = "String";
if str1="String" then
endif;
(9) &
取 地址 符,与C语言用法类似。
(10) < , > , = , <= , >= , !=
分别表示小于,大于,等于,小于等于,大于等于,不等于
(11) + , ^ , %
用于字符串的操作。
(12) ->
结构指针,与C语言中用法类似。
(13) @
用于得到Resource窗口中 定义 的字符串,例:
szReferenceFile = svDir ^ @PRODUCT_KEY;
3.函数
InstallShield的函数使用前同样需要声名,函数的 参数 传递方式十分类似C语言,例如下面的函数声名:
prototype HandleMoveDataError( NUMBER );
该声名中函数名为HandleMoveDataError,传递一个NUMBER类型的参数。调用该函数时也基本与C语言中相同。
函数体的标准格式为:
function function name(nResult)
// 函数变量声名区
begin
// 程序区
end;
通常的函数返回一个NUMBER型的数。
4.主程序结构
主程序以program开始,以endprogram结尾,
二.框架程序的基本结构
程序开始为函数与变量的声明区
通过向导建立的框架程序包含以下一些主函数:
prototype ShowDialogs();
// 显示 安装 向导 对话框
prototype MoveFileData();
// 移动 文件 数据
prototype HandleMoveDataError( NUMBER );
// 移动数据出错处理
prototype ProcessBeforeDataMove();
// 移动文件数据前的处理
prototype ProcessAfterDataMove();
// 移动文件数据后的处理
prototype Setup Registry();
// 安装注册,用户可在此加入一些代码,通常用于对 注册表 的操作
prototype SetupFolders();
// 安装生成快捷方式,通常用户可在此加入生成快捷方式的代码
prototype CleanUpInstall();
// 安装完成后清除临时文件
prototype SetupInstall();
// 安装的实际过程
prototype SetupScreen();
// 设置安装过程的屏幕显示(包括背景颜色,字体等)
prototype CheckRequirements();
// 检查安装需求(包括硬盘空间, 操作 系统 平台等)
prototype DialogShowSdWelcome();
// 显示“欢迎”对话框窗口
prototype DialogShowSdLicense();
// 显示许可信息的对话框
prototype DialogShowSdRegisterUserEx();
// 显示用户安装注册的对话框
prototype DialogShowSdAskDestPath();
// 显示“安装路径选择”对话框
prototype DialogShowSdSetupType();
// 显示“安装类型选择”对话框
prototype DialogShowSdComponentDialog2();
// 当用户选择“定制”安装时,用于显示供用户选择的组件的对话框
prototype DialogShowSdSelectFolder();
// 显示快捷方式文件夹选择的对话框
prototype DialogShowSdF ini shReboot();
// 显示“安装完成重启动”对话框
编程实例:
1.怎样在进度条左上角显示当前安装的文件
在function SetupScreen()中加入以下语句
Enable( INDVFILESTATUS );
2.怎样改变窗口背景色
SetColor( BACKGROUND, **** )函数可以改变窗口背景色,在适当的位置加上它即可,其中第二个变量可以为以下值:
BK_BLUE BK_MAGENTA BK_PINK BK_YELLOW
BK_GREEN BK_ORANGE BK_RED
以上几种为渐变色
BK_SOLIDBLACK BK_SOLIDMAGENTA BK_SOLIDRED
BK_SOLIDBLUE BK_SOLIDORANGE BK_SOLIDWHITE
BK_SOLIDGREEN BK_SOLIDPINK BK_SOLIDYELLOW
同时第二个参数也可以用RGB来描述,如SetColor( BACKGROUND, RGB(0,0,255) )
3.怎样在InstallShield5.0以下版本建立快捷方式
在InstallShield5.1以上版本可以可以在Resource窗口中建立,而在以前的版本必须用程序解决该问题, 如果现在有一文件RegPad. exe (安装路径为用户选定的),给该程序在“开始”->“程序”中加一个快捷方式,具体实现程序如下:
function SetupFolders()
NUMBER nResult;
STRING svResult,szCommand;
STRING szName;
begin
szName = "RegPad.exe";
szCommand = TARGETDIR ^ szName ;
LongPathToQuote ( szCommand , TRUE );
AddFolderIcon ( FOLDER_PROGRAMS^"RegPad1.0Beta","RegPad" ,
szCommand , TARGETDIR , "" , 0 ,"" , REPLACE );
4.怎样控制用户序列号
在向导生成的框架程序中,定义了一个STRING型的全局变量svSerial,在SdRegisterUserEx()结束时将给 该值赋上用户输入的序列号,你对该变量进行判断即可。
5.怎样控制重新启动 计算机
只需加入以下语句
System ( SYS_BOOTWIN );
6.怎样给Autoexec.bat或Config.sys加入语句
以下程序给Autoexec.bat加入一行语句
OpenFileMode ( FILE_MODE_APPEND );
OpenFile (nvFileHandle, "C://","Autoexec.bat");
WriteLine ( nvFileHandle , "SETPATH=%PATH%;C://ORAWIN95//BIN" );
7.怎样在安装结束时允许用户选择是否打开Readme文件
假定Readme. txt 文件已经复制到目标路径,以下程序将显示一个复选框,如果用户选择了,则用记事本打开Readme. txt 。
function DialogShowSdFinishReboot()
NUMBER nResult, nDefOptions;
STRING szTitle, szMsg1, szMsg2, szOption1,szOption2,szPathls;
NUMBER bOpt1, bOpt2;
begin
if (!BATCH_INSTALL) then
bOpt1 = TRUE;
bOpt2 = FALSE;
szMsg1 = "";
szMsg2 = "";
szOption1 = "阅读Readme文件";
szOption2 = "";
nResult = SdFinish( szTitle, szMsg1, szMsg2,szOption1, szOption2, bOpt1, bOpt2 );
if bOpt1 = TRUE then
CopyFile ( "Readme.txt" ,"Readme.txt" );
LaunchApp ( WINDIR^"Notepad.exe" ,TARGETDIR^"Readme.txt" );
endif;
return 0;
endif;
..........
8.如何指定默认路径
在function SetupInstall()中修改以下代码,如默认目录改为C:/JttMis,见以下修改的代码
if (bIs32BitSetup) then
svDir = WINDISK ^ "Jttmis";
else
svDir = WINDISK ^ "Jttmis"; // use shortnames
endif;
TARGETDIR = svDir;