- /*----------------------------------------------/
- / 关于 NSIS 自定义控件写入超过 8192 字节的插件。/
- / 理论上如果控件能够容纳,多大的文本都能放入 /
- /----------------------------------------------*/
- !include "MUI.nsh"
- !include "LogicLib.nsh"
- Name "test"
- OutFile "Setup.exe"
- SetCompressor lzma ; 设置 lzma 压缩方式
- Var hwnd ; 自定义页面的窗口句柄
- Page custom PageInitFunc "" # 自定义页面
- !insertmacro MUI_PAGE_INSTFILES # 安装过程页面
- !insertmacro MUI_LANGUAGE "SimpChinese" # 设置安装界面语言
- ReserveFile "io.ini" # 预先打包文件,方便安装加速释放
- ReserveFile "license.txt" # 预先打包文件,方便安装加速释放
- Function .onInit
- InitPluginsDir
- File "/oname=$PLUGINSDIR\io.ini" "io.ini" ; 释放 io.ini 文件
- File "/oname=$PLUGINSDIR\license.txt" "license.txt" ; 释放 license.txt 文件,该文件是一个超过 30 KB 的文本文件
- FunctionEnd
- Function PageInitFunc
- InstallOptions::initDialog /NOUNLOAD "$PLUGINSDIR\io.ini"
- Pop $hwnd ; 获取自定义页面的窗口句柄
- GetDlgItem $1 $hwnd 1200 ; 控件句柄获取公式 (1200 + field 1 - 1)
- Push "$PLUGINSDIR\license.txt" # 在堆栈中压入 大文本文件
- Push $1 # 在堆栈中压入 控件句柄
- Call ShowText # 调用过程,在控件中加入大文本
- InstallOptions::show ; 显示自定义页面
- Pop $0
- FunctionEnd
- Function ShowText
- # 如果你对程序设计不熟悉,那么你可以不用理解这个过程,把它复制到你的脚本中就可以了。
- Exch $R0 ;控件句柄
- Exch
- Exch $R1 ;文件
- Push $R2
- Push $R3
- Push $R4
- Push $R5
- ClearErrors
- FileOpen $R2 $R1 r ;$R2 = 文件句柄
- ${Unless} ${Errors} ;确保打开文件没有发生错误
- System::Call /NOUNLOAD "Kernel32::GetFileSize(i, i) i (R2, 0) .R3" ;$R3 = 文件大小
- IntOp $R3 $R3 + 1
- System::Alloc /NOUNLOAD $R3 ;分配内存
- Pop $R4 ;内存地址
- ${If} $R4 U> 0 ;确保分配了内存
- System::Call /NOUNLOAD "*(i 0) i .R5"
- System::Call /NOUNLOAD `Kernel32::ReadFile(i, i, i, i, i) i (R2, R4R4, R3, R5R5, 0)`
- System::Call /NOUNLOAD "*$R5(i .R1)"
- ${If} $R1 > 0
- System::Call /NOUNLOAD "User32::SendMessage(i, i, i, i) i (R0, ${WM_SETTEXT}, 0, R4)"
- ${EndIf}
- System::Free /NOUNLOAD $R5
- System::Free $R4 ;释放内存
- ${EndIf}
- FileClose $R2
- ${EndUnless}
- Pop $R5
- Pop $R4
- Pop $R3
- Pop $R2
- Pop $R1
- Pop $R0
- FunctionEnd
- Section "sec a" SEC1
- SectionEnd
复制代码
- [Settings]
- NumFields=1
- [Field 1]
- Type=Text
- Flags=MULTILINE|VSCROLL
- State=Text
- Left=2
- Right=299
- Top=3
- Bottom=137
复制代码 |