在 NSIS 中,要实现在用户许可界面打开时自动滚动到底部或其他位置,你可以使用 SendMessage 命令发送 WM_VSCROLL 或 WM_HSCROLL 消息来控制滚动条的位置。以下是一个示例 NSIS 脚本,演示如何在用户许可界面打开时滚动到底部:
nsis
Copy code
!include "MUI2.nsh"
!define IDC_RICHEDIT 101
!define WM_VSCROLL 0x115
!define SB_BOTTOM 7
Function CustomPage
!insertmacro MUI_HEADER_TEXT "Custom Page" "This is a custom page."
nsDialogs::Create 1018
Pop $0
${If} $0 == error
Abort
${EndIf}
${If} ${NSIS_PTR_SIZE} = 4
System::Call "*(i,i,i,i,i,i,i,i)i.r0"
${Else}
System::Call "*(i,i,i.r0)"
${EndIf}
Pop $1
nsDialogs::CreateControl "RICHEDIT" ${DEFAULT_STYLES}|${WS_VSCROLL}|${ES_MULTILINE}|${ES_AUTOVSCROLL}|${WS_TABSTOP} ${DEFAULT_EX_STYLES}|${WS_EX_CLIENTEDGE} 0 0 100% 100% "" $1
SendMessage $1 ${WM_VSCROLL} ${SB_BOTTOM} 0 ; 滚动到底部
nsDialogs::Show
FunctionEnd
!define MUI_CUSTOMFUNCTION_GUIINIT CustomPage
!insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Docs\Modern UI\license.txt"
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE English
在这个例子中,我们使用了 SendMessage 命令,通过发送 WM_VSCROLL 消息,将滚动条滚动到底部。你可以根据需要自定义消息和位置。在实际的 NSIS 脚本中,你需要找到许可协议页面的控件 ID,并将其替换为 SendMessage 中的相应控件 ID。
请注意,此示例使用 MUI2 插件。如果你使用的是 MUI 插件,请相应地调整。此外,具体的控件 ID 和消息类型可能取决于你使用的 NSIS 插件或主题。
博客园还有提问板块?今天才知道,巧了,这问题不难,有专用插件ScrollLicense.dll专门针对这个需求
Unicode false
!include MUI.nsh
Name "ScrollLicense Test"
OutFile "ScrollLicense.exe"
!define MUI_LICENSEPAGE_TEXT_TOP "必须翻到许可证文本底部才能点击下一步"
!define MUI_PAGE_CUSTOMFUNCTION_SHOW LicenseShow
!insertmacro MUI_PAGE_LICENSE ExampleCheckBox.nsi
!insertmacro MUI_LANGUAGE SimpChinese
Function LicenseShow
ScrollLicense::Set /NOUNLOAD
FunctionEnd
Function .onGUIEnd
ScrollLicense::Unload
FunctionEnd
Section "A Section"
SectionEnd