NSIS:是否可以添加指向 MUI_LICENSEPAGE_TEXT_BOTTOM 的链接?

问题描述 投票:0回答:1

我正在尝试将超链接添加到许可证页面的底部文本。

例如:

!define MUI_LICENSEPAGE_TEXT_BOTTOM "Click this link -> http://www.google.com/"

!insertmacro MUI_PAGE_LICENSE "${license}"

我环顾四周,发现有一个链接器插件可以做这种事情: https://nsis.sourceforge.io/Linker_plug-in

但这似乎只适用于标签。是否可以对许可证页面的底部文本进行处理?我也很困惑链接器插件如何与 FindWindow $0 "#32770" "" $HWNDPARENT 我们如何知道要使用的窗口号?

windows-installer nsis
1个回答
0
投票

NSIS 对非自定义页面上的链接没有很好的支持。

您可以使用您找到的Linker插件:

!include MUI2.nsh
!define MUI_PAGE_CUSTOMFUNCTION_SHOW OnLicShow
!define MUI_LICENSEPAGE_TEXT_BOTTOM "Click this link -> http://www.google.com/"
!insertmacro MUI_PAGE_LICENSE "${__FILE__}"
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE English

Function OnLicShow
!if ${MUI_SYSVERSION} >= 2
StrCpy $0 $mui.LicensePage.Text
!else
FindWindow $0 "#32770" "" $HWNDPARENT
GetDlgItem $0 $0 1006 ; <-- Use MakeNsisW.exe=>Tools=>Window Info to find this id
!endif
Linker::link /NOUNLOAD $0 "http://www.google.com/"
FunctionEnd

或者这个疯狂的事情

Unicode True
RequestExecutionLevel User
XPStyle On ; SysLink
PESubsysVer 5.1 ; SysLink is XP+
!include MUI2.nsh
!define MUI_PAGE_CUSTOMFUNCTION_SHOW OnLicShow
!define MUI_LICENSEPAGE_TEXT_BOTTOM "Hello, click <A>this</A> if you dare"
!insertmacro MUI_PAGE_LICENSE "${__FILE__}"
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE English #*/

Function OnLicShow
!if ${MUI_SYSVERSION} >= 2
StrCpy $0 $mui.LicensePage.Text
!else
FindWindow $0 "#32770" "" $HWNDPARENT
GetDlgItem $0 $0 1006 ; Use makensis.exe=>Tools=>Window Info to find this id
!endif
${NSD_GetText} $0 $1
${NSD_SetText} $0 ""
System::Call 'USER32::GetClientRect(pr0,@r2)'
System::Call '*$2(i,i,i.r3,i.r4)'
WndEvent::CreateWindow SysLink $1 ${WS_CHILD}|${WS_VISIBLE} 0 0 0 $3 $4 $0
Var /Global mysyslink
Pop $mysyslink
GetFunctionAddress $1 SysLinkHandler
WndEvent::AddHandler "NOTIFY" "$0" $1
FunctionEnd
!define /IfNDef NM_CLICK -2
!define /IfNDef NM_RETURN -4
Function SysLinkHandler
${If} $2 = ${NM_CLICK}
${OrIf} $2 = ${NM_RETURN}
    ${If} $mysyslink Z= $3
        ExecShell "" "http://example.com"
    ${EndIf}
${EndIf}
FunctionEnd
© www.soinside.com 2019 - 2024. All rights reserved.