Added link to MUI_PAGE_INSTFILES does not show

2019-08-27 02:00发布

问题:

I'm trying to create a downloader that also has a "Download manually" link, but the link does not seem to show.

I tried to follow instructions from this post but can't seem to make it work.

I'm copying the script here in case anyone can point out what I might be missing - I'm a noob in NSIS scripting, sorry.

!include "MUI2.nsh"
!define NAME "instfileslink"
Name "${NAME}"
OutFile "${NAME}.exe"

!define MUI_PAGE_CUSTOMFUNCTION_SHOW MyInstFilesShow
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"

Var hCtl_test_Link1

Section
    Section
    inetc::get /caption "Downloading package" "http://speedtest.ftp.otenet.gr/files/test100Mb.db" "test100Mb.db" /end   
    Pop $R0
    StrCmp $R0 "OK" 0 dlfailed  
    Quit    
dlfailed:
    DetailPrint "Download failed: $R0"
    Abort   
SectionEnd

Function fnLinkClicked
    ExecShell "open" "http://speedtest.ftp.otenet.gr/files/test100Mb.db"
FunctionEnd

Function MyInstFilesShow
    ${NSD_CreateLink} 120u 175u 100% 10u "Download manually"
    Pop $hCtl_test_Link1
    ${NSD_OnClick} $hCtl_test_Link1 fnLinkClicked
FunctionEnd

回答1:

You cannot use NSDialogs controls (${NSD_Create*}) outside a NSDialogs dialog!

You can use ChangeUI/MUI_UI to add controls to a built-in page or you can add the dynamically at run-time by manually creating a window. You need to use the ButtonEvent plug-in to catch the click events:

!include "MUI2.nsh"

!define MUI_PAGE_CUSTOMFUNCTION_SHOW MyInstFilesShow
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"

!include nsDialogs.nsh ; For style defines
ShowInstDetails hide
Function MyInstFilesShow
  FindWindow $0 "#32770" "" $HWNDPARENT ; Find the inner dialog
  System::Call 'USER32::CreateWindowEx(i0, t "STATIC", t "Download manually", i${WS_CHILD}|${WS_VISIBLE}|${SS_NOTIFY}, i 100, i 200, i 300, i 50, p $0, i 0x666, p 0, p 0)p.s'
  Pop $0
  SetCtlColors $0 0000ff transparent 
  SendMessage $hwndparent ${WM_GETFONT} 0 0 $1
  SendMessage $0 ${WM_SETFONT} $1 1
  GetFunctionAddress $1 fnLinkClicked
  ButtonEvent::AddEventHandler 0x666 $1
FunctionEnd

Function fnLinkClicked
  ExecShell "open" "http://speedtest.ftp.otenet.gr/files/test100Mb.db"
FunctionEnd


标签: nsis