无法在 NSIS 卸载程序中隐藏后退按钮

Unable to hide back button in NSIS Uninstaller

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

我的问题是我无法隐藏“INSTFILES”页面中的 'Back' 按钮。 我尝试了各种方法来隐藏它,但它只是停留在禁用状态。

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

GetDlgItem  $HWNDPARENT 3
ShowWindow  ${SW_HIDE}

当与 ID 1 和 2 一起使用时,以上代码适用于“下一步”和“取消”按钮。

上面的代码我在很多地方都试过了

代码:

!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 个小时,但没有运气。
这是屏幕现在的样子(请注意,我在图像中隐藏了“下一步”和“取消”按钮,以说明隐藏这些按钮对我来说效果很好):

GetDlgItem  $HWNDPARENT 3
ShowWindow  ${SW_HIDE}

此代码完全正确并且工作正常(已测试)。

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

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

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

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

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

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

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