能否不安装字体修改NSIS安装程序字体?FontInfo插件用法咨询
在NSIS中不安装系统字体即可自定义安装界面字体的实现方案
核心需求回顾
- 打包自定义.ttf字体到安装程序
- 不将字体安装到Windows系统字体目录,仅在安装界面临时使用
- 替代原生
CreateFont(只能调用已安装的系统字体),用FontInfo插件实现
步骤1:打包字体到安装程序
把你的.ttf字体文件打包到安装程序的临时插件目录(安装后自动清理,无需额外卸载处理):
; 替换成你本地字体文件的路径,释放到NSIS临时插件目录 File "/oname=$PLUGINSDIR/mycustomfont.ttf" "D:/fonts/mycustomfont.ttf"
步骤2:用FontInfo插件加载字体
先把FontInfo插件放到NSIS的Plugins目录(或脚本指定的插件路径),然后加载字体获取句柄:
; 加载字体,第二个参数为字体权重(0=常规,500=半粗,700=粗体) FontInfo::LoadFont "$PLUGINSDIR/mycustomfont.ttf" 500 Pop $0 ; $0存储加载后的字体句柄,后续用来设置界面
步骤3:将字体应用到安装界面控件
通过SendMessage把字体设置给界面控件,以Modern UI为例,在界面初始化后执行:
; 获取安装主窗口句柄 GetDlgItem $1 $HWNDPARENT 0 ; 给主窗口及所有子控件设置字体(1表示让控件销毁时释放字体) SendMessage $1 ${WM_SETFONT} $0 1 ; 也可以单独设置特定控件,比如标题文本(控件ID需根据你的界面调整) GetDlgItem $2 $HWNDPARENT 0x0409 SendMessage $2 ${WM_SETFONT} $0 1
提示:如果用的是自定义界面,需要确认对应控件的ID,可通过NSIS的控件查看工具获取。
步骤4:清理字体资源
安装完成后释放字体句柄,避免内存泄漏:
FontInfo::FreeFont $0
关键说明
原生CreateFont只能调用系统已安装的字体,无法直接读取打包的.ttf文件,FontInfo插件的核心作用就是加载未安装的字体文件并返回可用的字体句柄,刚好满足你不想改动系统字体的需求。
内容的提问来源于stack exchange,提问作者tux Neoh
相关产品推荐
相关产品推荐

