【问题标题】:Unable to hide back button in NSIS Uninstaller无法在 NSIS 卸载程序中隐藏后退按钮
【发布时间】:2021-01-18 05:15:32
【问题描述】:

我在 NSIS 中创建了一个卸载程序。
它有 3 个页面(1 个自定义页面(确认)、宏 MUI_UNPAGE_INSTFILES 和另一个自定义页面(完成))。

我的问题是我无法隐藏“INSTFILES”页面中的“返回”按钮。 我尝试了各种方法来隐藏它,但它只是处于禁用状态。

这是我用来隐藏后退按钮的代码:

GetDlgItem $1 $HWNDPARENT 3
ShowWindow $1 ${SW_HIDE}

上面的代码在与 ID 1 和 2 一起使用时适用于 Next 和 Cancel 按钮。

上面的代码我在各个地方都试过了

  • un.OnInit
  • myGuiInit(自定义)
  • 确认页面的页面LEAVE回调
  • INSTFILES 页面的页面 PRE 回调
  • INSTFILES 页面的页面 SHOW 回调

代码:

!define MUI_PAGE_CUSTOMFUNCTION_LEAVE un.InstShow
UninstPage custom un.UninstConfirm_Show
!define MUI_PAGE_CUSTOMFUNCTION_PRE un.InstShow
!define MUI_PAGE_CUSTOMFUNCTION_SHOW un.InstShow
!insertmacro MUI_UNPAGE_INSTFILES
UninstPage custom un.UninstFinish_Show

un.InstShow 有隐藏按钮的逻辑。

任何帮助将不胜感激。我已经花了将近 4 到 5 个小时来解决这个问题。
这就是屏​​幕现在的样子(请注意,我在图像中隐藏了 Next 和 Cancel 按钮,以说明隐藏这些按钮对我来说效果很好):

【问题讨论】:

  • 你的用户界面真的是这样的吗?您是否缺少 !insertmacro MUI_LANGUAGE?

标签: nsis


【解决方案1】:
GetDlgItem $1 $HWNDPARENT 3
ShowWindow $1 ${SW_HIDE}

此代码完全正确且运行良好(经过测试)。

我认为还有一些其他代码可以再次显示该按钮。

例如在页面 X 的 LEAVE 功能中隐藏按钮的情况下,下一个页面可能会再次显示该按钮。 这在常规 UI 中经常发生。

解决方案是检查所有自定义页面以及标准页面,以了解有关此按钮的任何操作。

【讨论】:

    【解决方案2】:

    NSIS 中的内部页面标志 PF_BACK_SHOW 是为除第一页之外的所有页面设置的,你必须绕过它。

    如果 InstFiles 页面是最后一页,或者如果您不想在之后的页面上显示后退按钮,则可以移动该按钮:

    Section -un.Main
    GetDlgItem $1 $hwndParent 3
    System::Call USER32::MoveWindow(pr1,i-9,i-9,i1,i1,i1)
    SectionEnd
    

    如果您只想在 InstFiles 页面上隐藏它而不是在之后的页面上隐藏它,那么您必须 use a timer 并在计时器回调中调用 ShowWindow

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 2020-06-06
      • 2014-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多