NSIS Скрыть детали после Показать детали - PullRequest
0 голосов
/ 15 ноября 2011

В моем инсталляторе у меня в данный момент отображается кнопка «Показать подробности», и я могу щелкнуть ее, чтобы перейти к деталям установки.

Можно ли в этот момент получить кнопку «Скрыть подробности», чтобы можно было вернуться туда, где детали скрыты?

Ответы [ 2 ]

1 голос
/ 30 апреля 2012

Из справочной документации по NSIS:

4.8.1.34 ShowInstDetails

hide | show | nevershow

Устанавливает, отображаются ли детали установки.Может быть «скрыть», чтобы скрыть детали по умолчанию, позволяя пользователю просматривать их, или «показать», чтобы показать их по умолчанию, или «nevershow», чтобы пользователь никогда не видел их.Обратите внимание, что разделы могут переопределить это с помощью SetDetailsView.

1 голос
/ 15 ноября 2011

Официальной поддержки для этого нет (вероятно, слишком много места потеряно кнопкой)

Если вы действительно хотите эту функцию и не возражаете против взлома, вы можете использовать этот код:

Outfile test.exe
RequestExecutionLevel user
!addplugindir ".\" ;http://nsis.sourceforge.net/ButtonEvent_plug-in

!include WinMessages.nsh
!include LogicLib.nsh

Page InstFiles "" PageInstShow

!define GWLP_ID -12
!define IDC_DETAILS 0x3F8
!define IDC_SHOWDETAILS 0x403
!define IDC_MYTOGGLE 0x1000

Function MyToggleClickHandler
FindWindow $9 "#32770" "" $HWNDPARENT
GetDlgItem $8 $9 ${IDC_MYTOGGLE}
GetDlgItem $7 $9 ${IDC_DETAILS}
System::Call 'user32::IsWindowVisible(ir7)i.r0'
${If} $0 = 0
    SendMessage $9 ${WM_COMMAND} ${IDC_SHOWDETAILS} 0
    SendMessage $8 ${WM_SETTEXT} 0 "STR:Hide &details"
    ShowWindow $8 1
${Else}
    SendMessage $8 ${WM_SETTEXT} 0 "STR:$(^ShowDetailsBtn)"
    ShowWindow $7 0
${EndIf}
FunctionEnd

Function PageInstShow
FindWindow $9 "#32770" "" $HWNDPARENT
GetDlgItem $8 $9 ${IDC_SHOWDETAILS}
System::Call 'user32::SetWindowLong(ir8,i ${GWLP_ID},i ${IDC_MYTOGGLE})'
GetFunctionAddress $1 MyToggleClickHandler
ButtonEvent::AddEventHandler ${IDC_MYTOGGLE} $1
System::Call '*(i,i,i,i)i.r1'
System::Call 'user32::GetWindowRect(ir8,ir1)'
System::Call 'user32::MapWindowPoints(i0,ir9,ir1,i2)'
System::Call '*$1(i,i,i,i.r6)'
GetDlgItem $7 $9 ${IDC_DETAILS}
System::Call 'user32::GetWindowRect(ir7,ir1)'
System::Call 'user32::MapWindowPoints(i0,ir9,ir1,i2)'
System::Call '*$1(i.r2,i.r3,i.r4,i.r5)'
System::Free $1
IntOp $3 $6 + 4 ; list top = button bottom + padding
IntOp $5 $5 - $3
System::Call 'user32::SetWindowPos(ir7,i,ir2,ir3,ir4,ir5,i 0)'
FunctionEnd

Section
SectionEnd
...