zoukankan      html  css  js  c++  java
  • InstallShield 脚本语言学习笔记

    InstallShield脚本语言是类似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 functionname(nResult)
        // 函数变量声名区
        begin
        // 程序区
        end;
        通常的函数返回一个NUMBER型的数。
        
         4.主程序结构
         主程序以program开始,以endprogram结尾,
        
        
        二.框架程序的基本结构
         程序开始为函数与变量的声明区
         通过向导建立的框架程序包含以下一些主函数:
         prototype ShowDialogs();
         // 显示安装向导对话框
        
         prototype MoveFileData();
         // 移动文件数据
        
         prototype HandleMoveDataError( NUMBER );
         // 移动数据出错处理
        
         prototype ProcessBeforeDataMove();
         // 移动文件数据前的处理
        
         prototype ProcessAfterDataMove();
         // 移动文件数据后的处理
        
         prototype SetupRegistry();
         // 安装注册,用户可在此加入一些代码,通常用于对注册表的操作
        
         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 DialogShowSdFinishReboot();
         // 显示“安装完成重启动”对话框
        
        
        编程实例:
        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 , "SET PATH=%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 short names
         endif;
        
         TARGETDIR = svDir;

    GetProfString()函数是系统函数,用于读取ini文件中的信息

       //第一个参数指定文件所在路径

       //第二个参数指定section名

       //第三个参数指定keyword名

       //最后一个参数用于 返回 前面指定的keyword的值。注意:是返回!  

    //ReplaceProfString()函数是系统函数,用于修改ini文件中keyword的值

       //第一个参数指定文件所在路径

       //第二个参数指定section名

       //第三个参数指定keyword名

       //第四个参数指定keyword原值

       //第五个参数指定keyword的新值

       //只有前面4个条件完全匹配时,原值才会被第五个参数中的新值替换                                                                                         

       ReplaceProfString (DB_Dir + "my.ini", "mysqld", "basedir", "/"" + DB_Dir + "/"", "/"" + ReplaceStr(DB_Dir) + "/"");

       ReplaceProfString (DB_Dir + "my.ini", "mysqld", "datadir", "/"" + DB_Dir + "Data/"", "/"" + ReplaceStr(DB_Dir + "Data") + "/"");

       //执行批处理

    感谢您的阅读,若有不足之处,欢迎指教,共同学习、共同进步。 博主网址:http://www.cnblogs.com/ChinacloudTech/ 独立博客:http://futuretechx.com 如您喜欢,麻烦推荐一下;如您有新想法,欢迎提出,邮箱:1145356699@qq.com。 本博客为博主原创,欢迎转载,但必须注明博客来源。 更多关于游戏开发的内容也可关注微信公众号:微浪游戏
  • 相关阅读:
    JS中怎样获取当前日期的前一个月和后一个月的日期字符串
    JS中怎样将时间字符串转换成Date并比较大小
    Java中判断两个Date时间段是否有交集的方法
    gRPC中Java和node进行异构通信-互为客户端和服务端
    ffmpeg external libraries 下载地址
    libsvtav1 的 qp 和比特率对照表
    libsvtav1 AV1 编码速度比 libaom 大大提升
    ffmpeg windows 最新编译内部版本下载地址变更
    解开获取 aria2c 帮助信息的误区
    frei0r 过了好几年增加 aech0r 滤镜
  • 原文地址:https://www.cnblogs.com/ChinacloudTech/p/6207050.html
Copyright © 2011-2022 走看看