In my installer, I currently have the "Show Details" button visible, and can click that to get to the installation details.
Is there any way to get a "Hide Details" button at this point to be able to go back to where the details are hidden?
From NSIS Scripting Reference documentation:
hide |show|nevershow
Sets whether or not the details of the install are shown. Can be 'hide' to hide the details by default, allowing the user to view them, or 'show' to show them by default, or 'nevershow', to prevent the user from ever seeing them. Note that sections can override this using SetDetailsView.
There is no official support for this (Too much space wasted by the button probably)
If you really want this feature and you don't mind hacks you can use this code:
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
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.