NSIS许可页面已预先检查

时间:2016-05-06 00:17:31

标签: licensing nsis

我在NSIS脚本中有以下代码......

!define MUI_LICENSEPAGE_CHECKBOX
!insertmacro MUI_PAGE_LICENSE "eula.txt"

......它运作正常。正如预期的那样,用户需要选中“我接受...”checkbox,然后启用安装button

我想简化流程,以便检查checkbox并默认启用安装button,并且所有用户需要做的就是安装或取消。

谢谢大家。

2 个答案:

答案 0 :(得分:2)

!define MUI_LICENSEPAGE_CHECKBOX             ; Tell MUI you want the checkbox version of the license page
!define MUI_PAGE_CUSTOMFUNCTION_SHOW licshow ; Tell MUI to call a function before the page is displayed
!insertmacro MUI_PAGE_LICENSE "eula.txt"     ; Adds the page

Function licshow                             ; Function to be called before the page is displayed
    ; Check it
    FindWindow $0 "#32770" "" $HWNDPARENT    ; Find the inner dialog (See attached picture)
    GetDlgItem $0 $0 0x40A                   ; Find the checkbox control
    SendMessage $0 ${BM_SETCHECK} 1 0        ; Check the checkbox

    ; Enable button
    GetDlgItem $0 $hwndparent 1              ; Find the Install/Next button
    EnableWindow $0 1                        ; Enable the button
FunctionEnd

最后一个GetDlgItem + EnableWindow命令可以被SendMessage $HWNDPARENT ${WM_COMMAND} 0x40A 0替换,以模拟用户点击并导致NSIS内部处理启用该按钮。

NSIS inner and outer dialog

答案 1 :(得分:0)

我很幸运,能够从几个地方一起抛出代码。

以下作品,但我不知道为什么NSIS明智,我根本不喜欢。如果有人可以将其分解,我真的非常感谢它。

!define MUI_LICENSEPAGE_CHECKBOX
!define MUI_PAGE_CUSTOMFUNCTION_SHOW licshow
!insertmacro MUI_PAGE_LICENSE "eula.txt"

Function licshow
    ; Check it
    FindWindow $0 "#32770" "" $HWNDPARENT
    GetDlgItem $0 $0 0x40A
    SendMessage $0 ${BM_SETCHECK} 1 0

    ; Enable button
    GetDlgItem $0 $hwndparent 1
    EnableWindow $0 1
FunctionEnd