Как я могу получить кнопку Готово после страницы nsDialogs - PullRequest
2 голосов
/ 07 февраля 2012

Я пытаюсь создать страницу конфигурации после установки в моем скрипте nsis, используя nsDialogs.Мой сценарий для сбора ввода и выполнения конфигурации работает, однако мне никогда не предоставляют кнопку «Завершить / закрыть / выйти» после завершения.В настоящее время объявление моих страниц выглядит следующим образом:

Page directory
Page instfiles
Page custom nsDialogsPage nsDialogsPageLeave

Как я могу получить кнопку Готово / Выход / Готово для отображения после выполнения nsDialogsPageLeave?

1 Ответ

6 голосов
/ 07 февраля 2012

Классический пользовательский интерфейс NSIS не имеет конечной страницы, страница instfiles обычно является последней страницей, и после выполнения всех разделов будет отображаться «кнопка завершения». Вы можете установить текст любой кнопки на ту же строку с помощью SendMessage $hwndButton ${WM_SETTEXT} 0 "STR:$(^CloseBtn)", если хотите указать свою собственную конечную страницу.

Большинство установщиков запрашивают требуемую информацию перед страницей instfiles. Если вы не можете сделать это, возможно, вы захотите использовать Современный пользовательский интерфейс , он предоставит вам конечную страницу:

!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
Page custom nsDialogsPage nsDialogsPageLeave
!insertmacro MUI_PAGE_FINISH

Мне было немного неясно, хотите ли вы две страницы; страница ввода, а затем завершающая страница или комбинированная страница ввода / завершения. Комбинированная страница немного странная, но это возможно:

!define AppName "Test"
Name "${AppName}"
Outfile "${AppName} setup.exe"
InstallDir $temp

!include LogicLib.nsh
!include WinMessages.nsh
!include nsDialogs.nsh

Var MyEndConfigPageStage

Page Directory
Page InstFiles
Page Custom MyEndConfigPageCreate MyEndConfigPageLeave /EnableCancel

Function MyEndConfigPageCreate
StrCpy $MyEndConfigPageStage 0
GetDlgItem $0 $hwndparent 1
SendMessage $0 ${WM_SETTEXT} 0 "STR:&Apply"
nsDialogs::Create 1018
Pop $0
${NSD_CreateCheckBox} 0 13u 100% -13u "FooBar"
Pop $1
nsDialogs::Show
FunctionEnd

Function MyEndConfigPageLeave
${If} $MyEndConfigPageStage > 0
    Return
${EndIf}
${NSD_GetState} $1 $2
ClearErrors
WriteIniStr "$instdir\settings.ini" Dummy "FooBar" $2
${If} ${Errors}
    MessageBox mb_iconstop "Unable to apply settings!"
    Abort
${EndIf}
IntOp $MyEndConfigPageStage $MyEndConfigPageStage + 1
GetDlgItem $0 $hwndparent 1
SendMessage $0 ${WM_SETTEXT} 0 "STR:$(^CloseBtn)"
GetDlgItem $0 $hwndparent 2
EnableWindow $0 0 ;Disable cancel
EnableWindow $1 0 ;Disable the checkbox
Abort
FunctionEnd

Section
SectionEnd
...