【问题标题】:NSD_GetState returns 0 always: NSISNSD_GetState 总是返回 0:NSIS
【发布时间】:2015-12-22 09:07:31
【问题描述】:

我试图在我的卸载程序中包含一个复选框。我能够将复选框放在适当的位置。但是,当我尝试获取复选框的状态时,即使选中了复选框,它也总是返回 0。这是我正在使用的代码

!define MUI_WELCOMEPAGE_TITLE_3LINES
!define MUI_PAGE_CUSTOMFUNCTION_SHOW un.ModifyUnWelcome
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_INSTFILES
!define MUI_FINISHPAGE_TITLE_3LINES
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE un.LeaveUnWelcome
!insertmacro MUI_UNPAGE_FINISH

Function un.ModifyUnWelcome
${NSD_CreateCheckbox} 120u -18u 50% 25u "Do something special"
Pop $mycheckbox
SetCtlColors $mycheckbox "" ${MUI_BGCOLOR}
${NSD_Check} $mycheckbox ; Check it by default
FunctionEnd

Function un.LeaveUnWelcome
${NSD_GetState} $mycheckbox $0
MessageBox MB_OK "On Leave mycheckbox = $mycheckbox $\n $$0 = $0"
${If} $0 <> 0
    MessageBox mb_ok "I'm special"
${EndIf}
FunctionEnd

因此,我无法验证复选框是否被选中。 我的代码有什么问题,我该如何解决?

我什至尝试过类似下面的方法

${NSD_Check} $mycheckbox ; Check it by default
${NSD_SetState} $mycheckbox ${BST_CHECKED}

上面的代码是从Adding a checkbox to the NSIS Uninstaller Welcome Page得到的

【问题讨论】:

  • 您是否收到编译器警告?
  • 您的结果可能会被微执行破坏,您是否使用变量来存储${NSD_GetState} 的结果会得到更好的结果?

标签: installation nsis


【解决方案1】:

您的自定义函数引用了两个不同的页面。 ModifyUnWelcome 在创建 MUI_UNPAGE_WELCOME 页面时调用,LeaveUnWelcome - 当用户离开最后一个 MUI_UNPAGE_FINISH 页面时。 ModifyUnWelcome 中的句柄所拥有的控件将在您调用 ${NSD_GetState} 时被销毁。您应该将自定义函数定义彼此靠近引用页面声明之前放置。

!define MUI_WELCOMEPAGE_TITLE_3LINES
!define MUI_PAGE_CUSTOMFUNCTION_SHOW un.ModifyUnWelcome
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE un.LeaveUnWelcome
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_INSTFILES
!define MUI_FINISHPAGE_TITLE_3LINES
!insertmacro MUI_UNPAGE_FINISH

【讨论】:

    猜你喜欢
    • 2015-09-27
    • 2014-03-20
    • 2013-04-13
    • 2013-03-30
    • 2016-07-13
    • 2023-04-09
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多