COMPONENTSPAGE и PAGE_DIRECTORY на одной стандартной странице.
Такое сочетание более практично и удобно, чем раздельное листание страниц (хотя лучше это делать с помощью nsDialogs )
Код:
!AddPluginDir .
!include "MUI2.nsh"
!define SHACF_FILESYSTEM 0x00000001
!define EN_CHANGE 0x0300
Name "COMPONENTS_PAGE_DIRECTORY"
OutFile "COMPONENTS_PAGE_DIRECTORY.exe"
InstallDir $TEMP
ShowInstDetails show
!define MUI_COMPONENTSPAGE_NODESC
; correct modern_nodesc.exe
!define MUI_UI_COMPONENTSPAGE_NODESC myui.exe
!define MUI_PAGE_CUSTOMFUNCTION_SHOW DirPageShow
!insertmacro MUI_PAGE_DIRECTORY
!define MUI_PAGE_CUSTOMFUNCTION_SHOW HideBack
!insertmacro MUI_PAGE_LICENSE ${__FILE__}
!define MUI_COMPONENTSPAGE_TEXT_INSTTYPE $(^DirBrowseText)
!define MUI_PAGE_CUSTOMFUNCTION_SHOW ComPageShow
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
Function DirPageShow
FindWindow $1 "#32770" "" $HWNDPARENT
System::Call User32::GetWindowLong(ir1,i4)i.R0
SendMessage $HWNDPARENT 0x408 1 0
FunctionEnd
Function HideBack
GetDlgItem $0 $HWNDPARENT 3
ShowWindow $0 ${SW_HIDE}
FunctionEnd
Function ComPageShow
FindWindow $1 "#32770" "" $HWNDPARENT
GetFunctionAddress $0 onComPageCallback
WndProc::onCallback /r=1 $1 $0
GetDlgItem $0 $1 1001
SendMessage $0 ${WM_SETTEXT} 0 "STR:$(^BrowseBtn)"
GetDlgItem $0 $1 1007
SendMessage $0 ${WM_SETTEXT} 0 "STR:$(^DirText)"
GetDlgItem $0 $1 1020
SendMessage $0 ${WM_SETTEXT} 0 "STR:$(^DirSubText)"
GetDlgItem $0 $1 1019
SendMessage $0 ${WM_SETTEXT} 0 "STR:$INSTDIR"
System::Call `shlwapi::SHAutoComplete(ir0,i${SHACF_FILESYSTEM})`
FunctionEnd
Function onComPageCallback
${If} $2 = ${WM_COMMAND}
IntOp $5 $3 & 0x0000FFFF
IntOp $6 $3 >> 16
IntOp $6 $6 & 0x0000FFFF
${If} $6 = ${EN_CHANGE}
${AndIf} $5 = 1019
System::Call User32::GetDlgItemText(ir1,i1019,t.d,i${NSIS_MAX_STRLEN})
${EndIf}
System::Call User32::CallWindowProc(iR0,ir1,ir2,ir3,ir4)
${EndIf}
FunctionEnd
Section "Components" Main
SectionIn RO
SectionEnd
Section /o "Component1" Sec01
DetailPrint "Component 1"
SectionEnd
Section "Component 2" Sec02
DetailPrint "Component 2"
SectionEnd
myui.exe - подкорректированный modern_nodesc.exe
WndProc.dll - плагин
комплект во вложении :