6 自定义对话框函数
下列函数处理自定义对话框进程。你使用一个资源编辑器来创建对话框并可用这些函数把它插入脚本中。
任何你可以创建的Windows对话框都可以被使用在一个安装脚本中。对话框可以有单行或多行编辑框,单个或多个选择列表框,组合框,单选钮,复选框和下按按扭作为标准控件。对于更复杂的控件,则提供高级函数,如CmdGetHwndDlg, LOWORD和HIWORD。
CmdGetHwndDlg
检索一个对话框的句柄。
CtrlClear
删除一个编辑、静态、列表框或组合框控件。
CtrlDir
用一个目录列表或一个文件列表来填充一个列表框或组合框。
CtrlGetCurSel
从一个列表框或组合框中选择项目。
CtrlGetMLEText
从一个多行编辑或静态区域中检索文本。
CtrlGetMultCurSel
从一个多选列表框中返回选定项目。
CtrlGetState
从一个对话框中检索一个单选扭,复选框或下按按扭控件的状态。
CtrlGetSubCommand
检索在一个WaitOnDialog函数调用后对控件执行的操作。
CtrlGetText
从一个编辑区,一个静态区或一个组合框的编辑区中检索文本。
CtrlPGroups
检索在目标系统上存在的程序组列表。
CtrlSelectText
选择显示在一个编辑区中文本。
CtrlSetCurSel
在一个列表框或组合框中查找和设置当前选择。
CtrlSetFont
指定对话框中一个控件的字体。
CtrlSetList
把一个列表的内容放至一个列表框或组合框中。
CtrlSetMLEText
设置在一个多行编辑区中的文本。
CtrlSetMultCurSel
设置在一个多选列表框中的当前选择。
CtrlSetState
设置一个复选框,单选钮或下按按扭的当前状态。
CtrlSetText
设置在一个编辑区,一个静态文本区或一个组合框的编辑区中的文本。
DefineDialog
用InstallShield注册一个自定义对话框。
EndDialog
关闭一个自定义对话框。
EzDefineDialog
用InstallShield注册一个自定义对话框。
GetFont
检索一个字体的处理程序。
HIWORD
从一个32位的整数中检索高位字。
LOWORD
从一个32位的整数中检索低位字。
ReleaseDialog
释放一个对话框的关联内存。
SdMakeName
SdMakeName为一个自定义对话框创建一个节名。该节名在向一个.iss文件写或从一个.iss文件中读时使用,.iss文件由InstallShield Silent使用。
SilentReadData
指示InstallShield Silent为一个自定义对话框读取.iss文件对话数据。
SilentWriteData
指示InstallShield Silent为一个自定义对话框写对话数据到.iss文件。
WaitOnDialog
显现一个自定义对话框。
6.1 CmdGetHwndDlg
语法:CmdGetHwndDlg (szDialogName);
说明:CmdGetHwndDlg函数检索由szDialogName标识的对话框的窗口句柄。该对话框必须已经由EzDefineDialog (或DefineDialog)定义,并以通过调用WaitOnDialog而被初始化。
参数:
szDialogName
指定已经由EzDefineDialog (或DefineDialog)定义的对话框的名称。
返回值:
> 0:由szDialogName指定的对话框的窗口句柄。
< 0:CmdGetHwndDlg未能检索到句柄。请确认szDialogName指向的是一个已经正确定义并已被初始化的对话框。
注解:
·当一个对话框用WaitOnDialog函数初始化时,则为它分配一个窗口句柄;该句柄只和该对话框关联,直到一个对EndDialog的调用来关闭该对话框。如果你调用WaitOnDialog来打开在你脚本中先前已经被打开和关闭的一个对话框,你必须再次调用CmdGetHwndDlg来得到新句柄。老的句柄不再有效。
·通常,CmdGetHwndDlg在一个自定义对话框的DLG_INIT例程中被调用。该对话框的句柄被赋给HWND变量来供其它需要它的函数使用。
6.2 CtrlClear
语法:CtrlClear (szDialogName, nControlID);
说明:CtrlClear函数清除各种控件的内容;它删除一个自定义对话框中一个单行或多行编辑区,静态文本区,单或多选列表框或一个组合框的编辑区的内容。
参数:
szDialogName
指定包含有要被删除控件的对话框的名称。
nControlID
指定由szDialogName标识的对话框的控件ID。
返回值:
0:CtrlClear成功删除指定控件的内容。
< 0:CtrlClear未能删除对话框的内容。
6.3 CtrlDir
语法:CtrlDir (szDialogName, nControlID, szDir, nItems);
说明:CtrlDir函数用一个与szDir指定的路径或文件名相匹配的文件列表来填充一个列表框或一个组合框控件。你可以在列表中包括文件名,子目录名和磁盘驱动器名。CtrlDir函数仅工作于自定义对话框。
参数:
szDialogName
指定一个对话框的名称。
nControlID
指定列表框或组合框控件的资源ID。
szDir
指定全限定路径或全限定文件名,可以包括通配符。
nItems
指定在控件中显示的列表的类型。在该参数位置传递下列预定义常量之一。为包含多个元素类型,将这些常量用按位或操作符(|)组合起来:
DLG_DIR_FILE:创建一个与文件说明szDir匹配的文件的列表。
DLG_DIR_DIRECTORY:创建一个存在于路径说明szDir中的子目录的列表。
DLG_DIR_DRIVE:创建一个驱动器列表。
返回值:
0:CtrlDir成功填充一个对话框中指定的控件。
< 0:CtrlDir未能填充指定控件。
6.4 CtrlGetCurSel
语法:CtrlGetCurSel (szDialogName, nControlID, svText);
说明:CtrlGetCurSel函数从一个自定义对话框中的一个单选列表框或组合框控件中检索当前选定的项目。调用CtrlGetMultCurSel来从多选列表框中检索项目。
参数:
szDialogName
指定包含要被检索的项目的自定义对话框的名称。
nControlID
指定单选框或组合框控件的资源ID。
svText
返回nControlID指定的控件中当前被选定的项目。
返回值:
0:CtrlGetCurSel成功检索对话框中当前被选定的项目。
< 0:CtrlGetCurSel未能检索被选定的项目。
6.5 CtrlGetMLEText
语法:CtrlGetMLEText (szDialogName, nControlID, listID);
说明:CtrlGetMLEText函数检索一个自定义对话框中一个多行编辑控件的内容。InstallShield把多行编辑区中的每行放到由listID标识的一个字符串列表中。调用CtrlGetText来检索一个单行编辑区控件的内容。
参数:
szDialogName
指定一个自定义对话框的名称,该对话框包含了其内容要被检索的多行编辑控件。
nControlID
指定多行编辑控件的资源ID。
listID
返回nControlID标识的编辑区中的行的一个字符串列表。由listID标识的字符串列表必须已经通过调用ListCreate而被初始化。
返回值:
0:CtrlGetMLEText成功检索一个多行编辑区的内容。
< 0:CtrlGetMLEText未能检索控件的内容。
6.6 CtrlGetMultCurSel
语法:CtrlGetMultCurSel (szDialogName, nControlID, listID);
说明:CtrlGetMultCurSel函数检索一个多选列表框控件中的当前被选定的行。多选列表框的每个被选定行被放到由listID标识的一个字符串列表中。为从一个单选列表框控件中检索被选定的文本,调用CtrlGetCurSel。CtrlGetMultCurSel只使用于自定义对话框。
参数:
szDialogName
指定一个自定义对话框的名称,该对话框包含了其内容要被检索的列表框控件。
nControlID
指定多行编辑控件的资源ID。
listID
返回由nControlID标识的列表框中的行。由listID标识的字符串列表必须已经通过调用ListCreat而被初始化。
返回值:
0:CtrlGetMultCurSel成功检索当前选定项目。
< 0:CtrlGetMultCurSel未能检索项目。
6.7 CtrlGetState
语法:CtrlGetState (szDialogName, nControlID);
说明:CtrlGetState函数得到一个自定义对话框中一个复选框或单选钮的当前状态。
参数:
szDialogName
指定包含该控件的对话框的名称。
nControlID
指定其状态要被检索的复选框或单选钮的资源ID。
返回值:
BUTTON_CHECKED (-1001):复选框或单选钮被选定。
BUTTON_UNCHECKED (-1002):复选框或单选钮未被选定。
DLG_ERR (-1):CtrlGetState不能确定控件状态。
6.8 CtrlGetSubCommand
语法:CtrlGetSubCommand (szDialogName);
说明:CtrlGetSubCommand函数检索对一个自定义对话框中的一个控件所执行的操作。例如,CtrlGetSubCommand可以告诉你用户单击或双击了一个列表框或组合框控件。它也可以告诉你一个编辑区的内容被修改了。
高级开发人员可以调用CmdGetHwndDlg来处理附加信息。
参数:
szDialogName
指定自定义对话框的名称。
返回值:
EDITBOX_CHANGE (-1007):编辑框的内容已经改变。
LISTBOX_ENTER (-1008):用户双击了一个列表框项目。
LISTBOX_SELECT (-1009):用户单击了一个列表框项目。
6.9 CtrlGetText
语法:CtrlGetText (szDialogName, nControlID, svText);
说明:CtrlGetText函数从一个自定义对话框中的一个编辑区,静态文本区或按扭控件中检索文本。为从多行编辑区控件中检索文本,调用CtrlGetMLEText。
参数:
szDialogName
指定一个对话框的名称,该对话框包含了其文本要被检索的区域或控件。
nControlID
指定编辑区,静态文本区或下按按扭控件的资源ID。
svText
从由nControlID标识的控件或区域中返回的文本。
返回值:
0:CtrlGetText成功检索控件的内容。
< 0:CtrlGetText未能检索内容。
6.10 CtrlPGroups
语法:CtrlPGroups (szDialogName, nControlID);
说明:CtrlPGroups函数将一个现存程序文件夹列表放到一个列表框或组合框控件中。该函数仅工作于自定义对话框。
参数:
szDialogName
Specifies the name of a custom dialog box that contains the control to use.
指定自定义对话框的名称,该对话框包含要使用的控件。
nControlID
指定一个列表框或组合框控件的资源ID。
返回值:
0:CtrlPGroups成功把指定的程序文件夹列表放到控件中。
< 0:CtrlPGroups未能把指定的程序文件夹列表放到控件中。
6.11 CtrlSelectText
语法:CtrlSelectText (szDialogName, nControlID);
说明:CtrlSelectText函数选定一个编辑区或一个组合框的编辑区中的所有文本。如果该控件是一个多行编辑区,该函数选定所有行的所有文本。该函数仅工作于自定义对话框。
参数:
szDialogName
指定一个有效对话框的名称,该对话框包含要被选定的编辑区。
nControlID
指定要被选定的编辑区或组合框控件的资源ID。
返回值:
0:CtrlSelectText成功选定了区域中的所有文本。
< 0:CtrlSelectText未能选定文本。
6.12 CtrlSetCurSel
语法:CtrlSetCurSel (szDialogName, nControlID, szText);
说明:CtrlSetCurSel函数在指定的列表框或组合框控件中查找一个字符串。如果找到,CtrlSetCurSel选定(高亮显示)该项目。对多选列表框和组合框则调用CtrlSetMultCurSel。CtrlSetCurSel函数仅使用于自定义对话框。
参数:
szDialogName
指定一个有效自定义对话框的名称,该对话框包含要被查找的控件。
nControlID
指定包含查找字符串的控件的资源ID。
szText
指定查找字符串。如果该字符串被找到,则被选定(高亮显示)。
返回值:
0:CtrlSetCurSel成功找到和选定了指定的字符串。
< 0:CtrlSetCurSel未能找到和选定指定的字符串。
6.13 CtrlSetFont
语法:CtrlSetFont (szDialogName, hFont, nControlID);
说明:CtrlSetFont函数指定一个自定义对话框中一个控件的字体。在对话框消息处理循环中的DLG_INIT例程中调用该函数。
参数:
szDialogName
指定一个有效对话框的名称。
hFont
指定已经通过调用GetFont而被创建的一个字体的处理程序。
nControlID
指定其字体要被设置的控件的资源ID。为给对话框中的所有控件设置字体,给该参数传递预定义常量ALLCONTROLS。
返回值:
0:CtrlSetFont成功在一个对话框中设置所要求的字体。
< 0:CtrlSetFont未能在一个对话框中设置所要求的字体。
6.14 CtrlSetList
语法:CtrlSetList (szDialogName, nControlID, listID);
说明:CtrlSetList函数把一个字符串列表中的内容放到指定的单或多选列表框或组合框控件中。任何原先存在的内容被包含在listID中的项所置换。InstallShield将字符串列表中的每个元素放到列表框或组合框控件中的每个元素中。
参数:
szDialogName
指定包含列表框或组合框的对话框的名称。
nControlID
指定列表框或组合框的资源ID。
listID
指定一个字符串列表的名称,该列表包含要被拷贝到列表框或组合框控件中的元素。
返回值:
0:CtrlSetList成功将字符串的内容放到控件中。
< 0:CtrlSetList未能将字符串的内容放到控件中。
6.15 CtrlSetMLEText
语法:CtrlSetMLEText (szDialogName, nControlID, listID);
说明:CtrlSetMLEText函数设置一个多行编辑框控件中的文本。InstallShield 将listID中的每个字符串分别放进该多行编辑框控件中。该函数仅使用于自定义对话框。
参数:
szDialogName
指定一个对话框的名称。
nControlID
指定一个对话框中的多行编辑框控件的资源ID。
listID
指定一个有效字符串列表的名称 ,该列表包含了要被拷贝到多行编辑控件中的元素。
返回值:
0:CtrlSetMLEText将文本设置到控件中。
< 0:CtrlSetMLEText未能设置控件中的文本。
6.16 CtrlSetMultCurSel
语法:CtrlSetMultCurSel (szDialogName, nControlID, szText, nSelectFlag);
说明:CtrlSetMultCurSel函数查找指定的多选列表框或组合框控件。如果nSelectFlag 被设置为TRUE,CtrlSetMultCurSel选定(高亮显示)被找到的项目。该函数仅使用于自定义对话框。
参数:
szDialogName
指定一个自定义对话框的名称。
nControlID
指定对话框中多选列表框或组合框控件的资源ID。
szText
指定查找字符串。
nSelectFlag
指示当CtrlSetMultCurSel找到一个项目时是否要高亮显示它。在该参数位置传递下列预定义常量之一:
TRUE:表明该项目要被高亮显示。
FALSE:表明该项目不被高亮显示。
返回值:
0:CtrlSetMultCurSel在控件中找到文本,并根据nSelectFlag所指示的高亮显示它或不高亮显示它。
< 0:CtrlSetMultCurSel未能在控件中找到文本。
6.17 CtrlSetState
语法:CtrlSetState (szDialogName, nControlID, nState);
说明:CtrlSetState函数设置一个自定义对话框中的一个复选框或单选钮的当前状态。当你用一个资源编辑器或对话框编辑器创建单选钮和复选框时,你可以设置它们的某些特性。如果你因一个按扭的性能遇到了困难,则在编辑器中检查该控件的特性。
参数:
szDialogName
指定一个对话框的名称,该对话框包含复选框或单选钮控件。
nControlID
指定复选框或单选钮控件的资源ID。
nState
指定按扭控件的新状态。在该参数位置传递下列预定义常量之一:
BUTTON_CHECKED:设置按扭状态为CHECKED。
BUTTON_UNCHECKED:设置按扭状态为UNCHECKED。
返回值:
0:CtrlSetState成功设置复选框或单选钮控件的状态。
< 0:CtrlSetState未能设置该控件的状态。
6.18 CtrlSetText
语法:CtrlSetText (szDialogName, nControlID, szText);
说明:CtrlSetText函数设置一个自定义对话框中一个单行编辑区,静态文本区或按扭控件的文本。为设置多行编辑区中的文本,调用CtrlSetMLEText。
参数:
szDialogName
指定一个对话框的名称。
nControlID
指定其中的文本要被设置的单行编辑区,静态文本区或按扭控件的资源ID。
szText
指定放到控件中的文本。
返回值:
0:CtrlSetText成功设置控件中的文本。
< 0:CtrlSetText未能设置控件中的文本。
6.19 DefineDialog
语法:DefineDialog (szDialogName, hInstance, szDLLName, nDialogID, szDialogID,
nReserved, hwndOwner, lMsgLevel);
说明:DefineDialog函数定义一个自定义对话框。当你需要指定一个其属性不能由EzDefineDialog指定的对话框的属性时,调用该函数而不是EzDefineDialog。注意DefineDialog不显示自定义对话框。为显示一个自定义对话框,你必须调用WaitOnDialog。
参数:
szDialogName
指定你要定义的自定义对话框的名称。该名称标识该对话框并使用在所有随后对自定义对话框函数的调用中。该对话框的名称是区分大小写的,你必须完全按照你在该参数指定的那样来使用它。
hInstance
指定对话框驻留其中的DLL的实例句柄。如果你在szDLLName指定DLL的全限定名,你可以将该参数指定为0。为得到一个DLL的实例句柄,调用Microsoft Windows API LoadLibrary。
szDLLName
指定包含对话框资源的DLL文件的全限定名。如果你不指定一个路径,InstallShield在Windows 文件夹中查找该DLL。如果在那儿没有找到,InstallShield查找在查找路径中指定的文件夹。如果你用参数hInstance指定DLL的实例句柄,你可以给该参数传递一个空字符串。当对话框位于_isuser.dll时,你可以为该参数指定一个空字符串。如果该参数指定为一个空字符串,InstallShield将自动检测_isuser.dll。
nDialogID
如果你使用一个数字(而不是一个字符串)来标识对话框资源时,该参数指定资源ID。该参数只在szDialogID是一个空字符串时被使用。建议使用该参数而不是szDialogID来标识对话框资源。
szDialogID
如果你使用一个字符串(而不是一个数字)来标识对话框资源时,该参数指定资源ID。如果该参数是一个空字符串,nDialogID被用来标识对话框资源。强烈提议使用nDialogID而不是szDialogID来标识对话框资源。
nReserved
给该参数传递0。不允许其它值。
hwndOwner
指定主窗口的窗口句柄。将该参数指定为HWND_INSTALL来使得InstallShield主安装窗口成为对话框的主窗口。
lMsgLevel
该参数指定哪些窗口消息要被发送到该对话框。你必须用或操作符来将下列常量之一和常量DLG_CENTERED组合:
DLG_MSG_STANDARD:筛选掉大多数Windows消息;只有那些直接和对话框控件关联的被传递到对话框。
DLG_MSG_ALL :传递大多数Windows消息。
返回值:
0:DefineDialog成功定义对话框。
DLG_ERR_ALREADY_EXISTS (-3):你正试图定义一个已经由DefineDialog定义的对话框。你不能用相同的名称定义两个对话框。
DLG_ERR (-1):表示发生一个未确定的错误。
6.20 EndDialog
语法:EndDialog (szDialogName);
说明:EndDialog函数关闭一个自定义对话框。它删除对话框并启动对话框关闭进程。当下列任意一种情况存在时,使用EndDialog:
Next按扭或其等效已经被处理。
Cancel按扭或其等效已经被处理。
Close系统菜单选项已经被选定(该行为发送DLG_CLOSE消息)。
用户结束对话框操作的任何其它情况。
参数:
szDialogName
指定要关闭的对话框的名称。
返回值:
0:EndDialog成功关闭对话框。
< 0:EndDialog未能关闭对话框。
注解:
·在调用EndDialog关闭一个自定义对话框后,调用ReleaseDialog函数来释放与该自定义对话框关联的内存。
·只要你还没有调用ReleaseDialog来把对话框从内存删除,你可以就通过调用WaitOnDialog来重新显示一个已经由调用EndDialog关闭的自定义对话框。然而要注意,如果你调用WaitOnDialog来打开一个在你脚本中已经被打开和关闭的对话框时,你必须再次调用CmdGetHwndDlg来得到新句柄。老的句柄不再有效。
6.21 EzDefineDialog
语法:EzDefineDialog (szDialogName, szDLLName, szDialogID, nDialogID);
说明:EzDefineDialog函数定义一个自定义对话框。注意EzDefineDialog不显示自定义对话框。为显示一个自定义对话框,你必须调用WaitOnDialog。
参数:
szDialogName
指定和由szDialogID 或 nDialogID指定的对话框相关联的名称。为处理该对话框,在随后的对自定义对话框函数的调用中使用该名称。注意该对话框的名称是区分大小写的,你必须完全按照你在该参数指定的那样来使用它。
szDLLName
指定包含对话框资源的DLL文件的全限定名。如果你不指定一个路径,InstallShield在Windows 文件夹中查找该DLL。如果在那儿没有找到,InstallShield查找在查找路径中指定的文件夹。如果你用参数hInstance指定DLL的实例句柄,你可以给该参数传递一个空字符串。当对话框位于_isuser.dll时,你可以为该参数指定一个空字符串。如果该参数指定为一个空字符串,InstallShield将自动检测_isuser.dll。
szDialogID
如果你使用一个字符串(而不是一个数字)来标识对话框资源时,该参数指定资源ID。如果该参数是一个空字符串,nDialogID被用来标识对话框资源。强烈提议使用nDialogID而不是szDialogID来标识对话框资源。
nDialogID
如果你使用一个数字(而不是一个字符串)来标识对话框资源时,该参数指定资源ID。该参数只在szDialogID是一个空字符串时被使用。建议使用该参数而不是szDialogID来标识对话框资源。
返回值:
0:EzDefineDialog成功定义对话框。
DLG_ERR_ALREADY_EXISTS (-3):你正试图定义一个已经由EzDefineDialog定义的对话框。你不能用相同的名称定义两个对话框。
DLG_ERR (-1):表示发生一个未确定的错误。
6.22 GetFont
语法:GetFont (szFontName, nPointSize, nAttributes);
说明:GetFont函数建立一个字体并检索它的句柄,你可以使用字体句柄来指定在一个自定义对话框中的控件使用的字体。
参数:
szFontName
指定你要建立的字体的名称。
nPointSize
指定你要建立的字体的点数。
nAttributes
指定字体风格。在该参数位置传递下列预定义常量之一。可以用按位或操作符(|)组合常量来指定多种风格:
STYLE_BOLD:指定一个粗体风格的字体。
STYLE_ITALIC:指定斜体风格。
STYLE_NORMAL:指定一个正常的系统字体。
STYLE_UNDERLINE:指定字符被加下划线。
返回值:
XXXX:XXXX是该字体的句柄。
0:GetFont未能建立所要求的字体。
注解:
·当安装中止时,InstallShield将删除所有由该函数创建的字体。另外,中止时,InstallShield释放所有系统资源。
6.23 HIWORD
语法:HIWORD (lValue);
说明:HIWORD函数从由lValue指定的32位整型值中析取和返回高位字(高16位)。
参数:
lValue
指定要从中析取高16位的32位整数。
返回值:
HIWORD返回lValue的高位字(高16位)。
注解:
·InstallShield的 HIWORD因使用符号扩展而和相应的C的宏不同。因此,如果lValue是一个负数,则由HIWORD返回的值的高位字节用1填充。如有必要,你可以将结果和0xFFFF按位与(AND)来生成一个正数,如下所示:
lValue = HIWORD(lValue);
lValue = lValue & 0xFFFF;
6.24 LOWORD
语法:LOWORD (lValue);
说明:LOWORD函数从由lValue指定的32位整型值中析取和返回低位字(低16位)。
参数:
lValue
指定要从中析取低16位的32位整数。
返回值:
该函数返回整数的低位字(低16位)。
6.25 ReleaseDialog
语法:ReleaseDialog (szDialogName);
说明:ReleaseDialog 函数释放与szDialogName标识的自定义对话框相关联的所有内存。调用EndDialog后调用该函数。在消息处理的case语句外面调用该函数。
参数:
szDialogName
指定要消除的对话框的名称。
返回值:
0:表明函数成功释放和对话框相关联的所有内存。
DLG_ERR (-1):函数失败。对话框名可能是无效的。
DLG_ERR_ENDDLG (-2):在调用EndDialog前调用了ReleaseDialog。你必须首先调用EndDialog来删除对话框。
6.26 SdMakeName
语法:SdMakeName (svSection, szDlg, szUnused, nvDlgName);
说明:SdMakeName函数为一个对话框创建一个节名。该节名在向一个.iss文件写或从一个.iss文件中读时使用,.iss文件由InstallShield Silent使用。
参数:
svSection
指定节名。InstallShield使用变量szDlg 和 nvDlgName来给该变量置一个值。该值由SilentReadData 和SilentWriteData使用。
szDlg
指定对话框的名称,用来创建一个节名。
szUnused
该参数未用;给该参数传递一个空字符串。
nvDlgName
指定计数器,它记录针对szDlg指定的对话框而调用SdMakeName的次数。InstallShield自动递增该计数器。为每个自定义对话框使用一个唯一的变量名。(看下面的注解)
返回值:
无。
注解:
·为正确命名节,你必须为每个不同的自定义对话框在第四个参数使用一个唯一的变量名。要做到这一点的简单的方法是:使用szDlg的对话框名来命名变量。例如,当szDlg 是 "MyDlgOne"时,命名第四个参数的变量为nvMyDlgOne;当szDlg 是 "MyDlgTwo"时,命名变量为nvMyDlgTwo。
6.27 SilentReadData
语法:SilentReadData (szSection, szValName, nValType, svVal, nvVal);
说明:当一个安装运行于静止方式(silent mode)时(带-s开关运行Setup.exe时),SilentReadData函数指示InstallShield Silent如何为一个自定义对话框读取.iss文件对话框数据。注意你可以通过调用SilentWriteData来创建一个.iss文件。
为在你的脚本中使用SilentReadData,构造逻辑结构因而它首先检测来确认安装运行于静止方式。把SilentReadData函数的调用放置在一个测试系统变量MODE的if-else语句中,如下所示:
if (MODE=SILENTMODE) then
// 在此调用SilentReadData。
else
// 在此调用一个正常的,non-silent 函数。
endif;
自定义对话框可以是在你的安装脚本中使用函数(如EzDefineDialog 和WaitOnDialog)调用和处理的资源,也可以完全是外部的,如调用DLL中的函数一样被执行。另外一种情况是,你必须使用SilentReadData从.iss文件中检索对话框按扭的返回值(Next、Back、Cancel等等。)和在变量中被设置或返回的值。
参数:
szSection
指定.iss文件中的对话框数据的节的名称。不要包括方括号([ ])。参数szSection的格式为<functionname>-<number>,<functionname>是在脚本中使用的对话框函数名,<number>是在脚本中对话框出现的次数,从0开始。例如,MyDialog函数对话框的第一次出现会有一个szSection值"MyDialog-0",第二次出现则为"MyDialog-1",第三次为"MyDialog-2",如此继续。
szValName
指定出现在.iss文件的对话框数据的节中的值名。每个对话框至少有一个给szValName的值,来标识对话框按扭控件(BACK, NEXT 或 OK, 或 CANCEL)返回的值。其它值名用来标识和其它对话框控件相关联的值和数据。
nValType
标识赋给szValName中的值名的值的数据类型。值本身被保存在svVal 或 nvVal中,视nValType的值而定。在该参数位置传递下列预定义常量之一:
DATA_STRING:赋给szValName中的值名的值是STRING类型。它的值将保存在svValue中。
DATA_NUMBER:赋给szValName中的值名的值是NUMBER类型。它的值将保存在nvValue中。
DATA_COMPONENT:赋给szValName中的值名的值是一个组件名。它的值将保存在svValue中。
DATA_LIST:赋给szValName中的值名的值是一个InstallShield列表的列表ID。它的值将保存在nvValue中。
svVal
指定当nValType是 DATA_STRING 或DATA_COMPONENT时,赋给szValName中的值名的值。
nvVal
指定当nValType是DATA_NUMBER 或 DATA_LIST时,给szValName中的值名的值。
返回值:
0:SilentReadData成功指示InstallShield Silent如何为自定义对话框读取对话框数据。
< 0:SilentReadData未能指示InstallShield Silent如何为自定义对话框读取对话框数据。
注解:
下列情况下SilentReadData将失败(返回值小于0):
.iss文件未找到。
脚本中的对话框次序没有和.iss文件中指定的对话框次序完全匹配。
指定的对话框数据节在.iss文件中没有被找到。
指定的关键字名没有在指定的对话框数据节中找到。
赋给指定的关键字名的值的数据类型和在SilentReadData调用中指定的不匹配。
6.28 SilentWriteData
语法:SilentWriteData (szSection, szValName, nValType, szVal, nVal);
说明:SilentWriteData函数记录安装过程中自定义对话框中所作的选择。该选择数据被写到一个.iss文件中,供InstallShield Silent使用。为在一个安装过程中写写一个.iss文件,带-r开关项运行Setup.exe。
自定义对话框可以是在你的安装脚本中使用函数(如EzDefineDialog 和WaitOnDialog)调用和处理的资源,也可以完全是外部的,如调用DLL中的函数一样被执行。另外一种情况是,你必须使用SilentReadData从.iss文件中检索对话框按扭的返回值(Next, Back, Cancel,等等。)和在变量中被设置或返回的值。
参数:
与SilentReadData函数的参数相同。
返回值:
0:SilentReadData成功写自定义对话框的对话框数据到Setup.iss中。
< 0:SilentReadData未能写自定义对话框的对话框数据到Setup.iss中。
6.29 WaitOnDialog
语法:WaitOnDialog (szDlgName);
说明:WaitOnDialog函数显示一个自定义对话框。你的脚本可以根据该函数的返回值来处理用户的不同响应。
参数:
szDlgName
指定要显示的对话框的ID。
返回值:
dialog控件ID:接收到WM_COMMAND消息的对话框控件的ID。
DLG_CLOSE (-200):该消息作为对话框将要被关闭的信号。
DLG_ERR (-1):如果发生任何错误,则接收到该消息。
DLG_INIT (-100):就在对话框要被显示前接收到该消息。