清除InstallOptions页面中的字段状态

时间:2011-09-29 20:04:08

标签: installer nsis

我正在研究NSIS安装程序。其中一个要求是允许用户多次输入一些信息用于多个不同的条目(实际上,它允许用户输入服务器信息,因为它们可以根据需要输入多个服务器)。我目前正在通过高级选项页面转到此页面来回收页面:

Function RedirectPage
   ${If} $addtCheck <> 0 ; Was the checkbox checked?
      StrCpy $startedXml 1 ; make this "true"
       SendMessage $HWNDPARENT 0x408 -1 "" ; If so, go back
   ${Else}
      Abort
       ${EndIf}

FunctionEnd

addtCheck检查是否勾选了回收页面的复选框。如果是这样,此功能会导致再次显示上一页。问题是这些字段包含用户刚刚输入的信息。现在,我想要做的是在返回之前清除上一页的所有字段的状态。我尝试过做这样的事情,

!insertmacro MUI_INSTALLOPTIONS_WRITE "ioAdv.ini" "Field 2" "State" ""

但它似乎不允许我清除状态。我知道SendMessageGetDlgItem命令,但我不知道任何允许我使用它们来清除InstallOptions INI文件中包含的文本框,复选框和列表框的方法。 / p>

任何能指出我正确方向的人,谢谢。如果你想再看到这个剧本,请告诉我。

2 个答案:

答案 0 :(得分:2)

所以你应该在ini中拥有这样的控件:

  [Field 1]
  Type=Label
  Left=15
  Top=7
  Right=112
  Bottom=16
  Text=Text 1

然后你可以像这样得到一个关于这个领域的句柄:

ReadIniStr $0 $PLUGINSDIR\page_ini.ini "Field 1" "HWND"

那么您可以使用SendMessage命令$0,如下所示:

SendMessage $0 ${WM_SETTEXT} 0 "STR:$InitialString"

此示例适用于文本框,其他控件请参阅以下内容: 在“包含”下的NSIS安装路径中,文件Winmessages.nsh包含要使用的消息密钥。

在我的测试中,我找到了设置复选框的键:

SendMessage $0 ${BM_SETCHECK} 0 "0"

对于ListBoxes我发现:(未经测试)

LB_RESETCONTENT
LB_SELECTSTRING

希望有所帮助。 PS:如果您有任何问题或批评,请告诉我。

PPS:

或者,您可以将nsDialogs宏与HWND句柄一起使用,即用于复选框:

${NSD_Uncheck} $0

此宏的更多信息在这里: nsDialogs Readme - Macros

答案 1 :(得分:2)

您可以使用SendMessage重置每个控件,但是您必须处理不同类型的控件,只需重置.ini:

page custom custdircreate_1
page directory dirpagecreate

Function custdircreate_1
SetOverwrite on
!insertmacro INSTALLOPTIONS_EXTRACT "ioAdv.ini"
SetOverwrite lastused
!insertmacro INSTALLOPTIONS_DISPLAY "ioAdv.ini"
FunctionEnd

Function dirpagecreate
SendMessage $HWNDPARENT 0x408 -1 ""
FunctionEnd

..或重置状态并保留其他所有内容:

Function custdircreate_2
; INSTALLOPTIONS_EXTRACT was called in .onInit
!insertmacro INSTALLOPTIONS_READ $1 "ioAdv.ini" "Settings" "NumFields"
StrCpy $0 1
loop:
!insertmacro INSTALLOPTIONS_WRITE "ioAdv.ini" "Field $0" "State" ""
IntOp $0 $0 + 1
IntCmpU $0 $1 loop loop

!insertmacro INSTALLOPTIONS_DISPLAY "ioAdv.ini"
FunctionEnd

(这将重置链接和按钮控件,以便在需要时将其过滤掉)