- 桌面应用
【免费下载链接】noMeiryoUI
No!! MeiryoUI is Windows system font setting tool on Windows 8.1/10/11.
本指南以README_JA.md(日语 README)为主线,系统讲解 No!! MeiryoUI 这款开源系统字体设置工具的背景动机、系统要求、安装步骤、注册表备份与恢复方案,并结合仓库源码(如program/noMeiryoUI.cpp、program/util.cpp、lang/default.lng)深入剖析其“读取当前系统字体 → 用户选择字体 → 通过SystemParametersInfo写入注册表”的底层实现原理。阅读完成后,你将掌握如何在 Windows 8 及以上系统安全地备份注册表、安装运行工具、逐项或一键修改各类系统 UI 字体,并理解 Windows 11 22H2 之后的兼容性限制与规避手段。
一、项目背景:Windows 8 删掉的系统字体设置,它帮你找回来
No!! MeiryoUI(日文名「Meiryo UIも大っきらい!!」,即“我也讨厌 Meiryo UI!”)是一款面向 Windows 的免费开源小工具,其核心价值在于:重新提供了 Windows 旧版本中“更改系统字体”的功能。
在 Windows 8 及以后版本中,微软删除了传统控制面板里对系统 UI 字体的修改入口,用户无法再方便地更换标题栏、菜单、图标、提示框等处的默认字体。该项目正是针对这一改动而创建,让你重新拿回对系统界面字体的控制权,例如将默认的 Segoe UI / Meiryo UI 替换为自己习惯的字体。
- 语言支持:项目提供多语言界面与文档,包括日语(
README_JA.md)、简体中文(README_CN.md)、英文(README.md),以及help/目录下的 en-us、ja-jp、ko-kr、pt-br、zh-cn、zh-tw 六套帮助文档。 - 授权协议:本项目以 MIT License 开源发布(见 LICENSE)。
二、系统要求与支持范围
根据 README_JA.md 与 README.md,官方系统要求如下:
| 项目 | 说明 |
|---|---|
| 官方支持 | Windows 8 及以上(含 Windows 8.1 / 10 / 11) |
| 兼容性说明 | 程序在 Windows Vista 上也能运行,但作者未主动进行兼容性验证,仅供测试参考 |
| Windows 11 22H2 限制 | 从 Windows 11 22H2(2022 Update)起,部分功能受限(详见下文“已知问题”) |
从源码角度印证:在 program/noMeiryoUI.cpp 的OnAppliStart()中,程序读取系统版本后按版本分支设置兼容标志:
majorVersion < 6(Windows XP 及更早):禁用 Windows 7 兼容模式;majorVersion == 6且minorVersion < 2(Vista/7):同样走旧式路径;majorVersion == 6且minorVersion >= 2(Windows 8/8.1):启用WIN8_SIZE字体尺寸计算方式;majorVersion == 10及以上:按新版 Windows 10/11 处理。
而GetVersionForApp()(定义于 program/util.cpp)会特别处理:Windows 11 内部版本号为 10,但 build number ≥ 22000(21H2 首发版本)时,程序将其识别为majorVersion = 11,从而决定是否进入 22H2 兼容模式(compatLevel = 1)。
三、安装步骤
3.1 获取发行包
官方安装方式为绿色便携式(Portable)分发,无需安装程序:
- 从项目的 Releases 页面下载 zip 格式压缩包(README 中指向 GitHub Releases 最新版);
- 解压压缩包;
- 直接运行解压目录中的
noMeiryoUI.exe。
程序不需要安装到系统目录,可放在任意可写位置(例如D:\Tools\noMeiryoUI\)。仓库中的 packaging/Makefile 与 packaging/makeportable.bat 展示了打包 portable 版本的方式,packaging/files/filelist.txt 列出了发布物包含的文件清单。
3.2 ⚠️ 重要:先备份注册表
No!! MeiryoUI 会直接修改 Windows 注册表。官方 README 强烈建议:在任何字体变更操作之前,先备份注册表。
官方推荐的备份命令(作用于当前用户的“控制面板”配置单元,即字体设置的实际存放位置):
reg save "HKCU\Control Panel" .\reset_font.reg /y参数说明:
| 参数 | 含义 |
|---|---|
reg save | 将指定注册表项导出为 hive 文件(二进制快照,可用reg restore还原) |
"HKCU\Control Panel" | 当前用户的Control Panel注册表子树,系统字体设置主要位于HKCU\Control Panel\Desktop等键 |
.\reset_font.reg | 备份文件的保存路径与文件名(可自定义) |
/y | 若文件已存在则直接覆盖,不再询问 |
提示:官方文档同时提供了 Windows 自带“系统还原”作为另一条回退路径,同样可行。
此外,仓库的util/目录下还提供了两条批处理脚本,用于更完整的注册表备份与恢复:
- util/SAVEreg.bat:以管理员权限运行,将
HKLM\SOFTWARE与HKCU\Control Panel分别保存为%LOCALAPPDATA%\noMeiryoUI_HKLM.reg与%LOCALAPPDATA%\noMeiryoUI_HKCU.reg; - util/RESTOREreg.bat:从上述备份文件恢复
HKCU\Control Panel(HKLM 部分默认被注释掉),并自动执行shutdown /r /t 0重启系统以完成还原。
恢复后需要重启系统才能让字体设置完全还原。
四、运行与使用:界面、菜单与核心操作
4.1 主界面结构
程序运行后弹出主对话框(截图见 help/zh-cn/contents/noMeiryoUI.PNG),主界面分为两大区域(对应 lang/default.lng 中的DLG_ALL_GROUP/DLG_INDIVIDUAL_GROUP):
- 所有字体设置(All font setting):一个字体选择框 + “全部应用并退出(Apply all and exit)”按钮,用于一键把同一字体应用到所有系统 UI 位置;
- 单独字体设置(Individual font setting):7 个可分别设置的条目,每项都有独立的字体选择按钮(Select…):
| 条目(资源键) | 对应的系统 UI 部位 | 底层结构字段(LOGFONT 字段) |
|---|---|---|
| Title bar(标题栏) | 窗口标题栏文字 | NONCLIENTMETRICS.lfCaptionFont |
| Icon(图标) | 桌面/资源管理器图标文字 | LOGFONT iconFont(SPI_GETICONTITLELOGFONT) |
| Palette title(调色板标题) | 小标题栏(工具窗口、浮动面板) | lfSmCaptionFont |
| Hint(提示) | 工具提示(Tooltip) | lfStatusFont |
| Message box(消息框) | 对话框/消息框文字 | lfMessageFont |
| Menu(菜单) | 菜单栏与菜单项 | lfMenuFont |
这些字段与源码中selectFont()的enum fontType(见 program/noMeiryoUI.h)一一对应,并在getActualFont()(program/noMeiryoUI.cpp)中通过SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ...)与SPI_GETICONTITLELOGFONT读取当前值。
4.2 操作流程
- 启动
noMeiryoUI.exe,程序自动读取当前系统各部位的字体并在文本框中显示“字体名 + 点数(pt)”; - 在“所有字体设置”中点击
Select...,或对每个单独条目分别选择字体; - 选择字体时可指定字族、字形(粗体/斜体/下划线/删除线)、字号与字符集(FontSel 对话框,界面截图见 help/zh-cn/contents/FontSel.PNG);
- 应用方式:
- Apply and exit(应用并退出):将当前设置的字体写入系统并关闭程序;
- Apply all and exit(全部应用并退出):将所选字体应用到全部条目;
- Exit without Apply(不应用退出):放弃修改直接关闭。
4.3 菜单功能(对应 lang/default.lng 的 MENU 资源)
- File(文件):
Load font settings...(从 ini 文件载入字体配置)、Save font settings...(保存配置)、Set system fonts and quit(应用并退出)、Exit(退出); - Preset(预设):
Windows 8/8.1、Windows 10、Windows 11——一键恢复各 Windows 版本的默认系统字体组合; - Tools(工具):
Choice No!! MeiryoUI application font:单独修改本程序自身的界面字体;Set system fonts in separated thread:在独立线程中执行字体写入(减少界面卡顿);Calculate font size same as Windows 7:切换字号换算方式(Windows 7 兼容计算);Don't run multiply:禁止多实例运行;Force title bar font change enabled:强制启用标题栏字体修改(Windows 11 22H2+ 下勾选后可用,但有警告);
- Help(帮助):打开帮助文档、查看关于(About)信息。
预设菜单仅在对应语言文件中存在[PRESET]段时可用。源码中initializeLocale()通过readFontResource8/10/11()读取预设资源,若读取失败(如老系统上Segoe UI不可用)则禁用对应菜单项;同时,在OnWindowShown()中还会根据系统主版本号禁用高于当前系统的预设(例如 Windows 8 上禁用 Win10/Win11 预设)。
4.4 命令行选项(用于自动化/开机自启)
getOption()/parseOption()(program/noMeiryoUI.cpp)支持以下命令行参数:
| 参数 | 作用 |
|---|---|
设置文件路径(第一个参数) | 启动时直接载入指定的 ini 字体配置文件(相对路径基于当前目录解析) |
-set | 静默应用配置并立即退出,不显示主窗口(适用于登录脚本) |
-delay <秒> | 与-set搭配,延迟指定秒数后再执行字体设置(autosetDelay) |
-force | 强制允许修改标题栏字体(Windows 11 22H2+ 场景) |
noMeiryoUI | 在字体选择对话框中隐藏 Meiryo UI 字体族 |
noTahoma | 在字体选择对话框中隐藏 Tahoma 字体族 |
典型用法示例:
noMeiryoUI.exe myfonts.ini -set noMeiryoUI.exe myfonts.ini -set -delay 3 noMeiryoUI.exe myfonts.ini -set -force注意:当使用-set且未加-force时,若系统处于 Windows 11 22H2+ 兼容模式(compatLevel > 0),程序会先通过set11TitlePreset()将标题栏字体重置为系统默认(Segoe UI),再应用其余字体——这与 GUI 中的行为保持一致。
4.5 字体配置文件的保存与载入(ini 格式)
通过菜单“Save font settings...”可以把当前整套字体配置保存为 ini 文件(载入路径对应*.ini过滤器),便于迁移到另一台机器或写进启动脚本。配置文件结构由saveFont()/loadFont()(program/noMeiryoUI.cpp)定义,每个字体一个 Section,例如:
[TitleFont] FaceName=Microsoft YaHei UI Height=9.000000 Width=0.000000 Escapement=0 Orientation=0 Weight=400 Italic=0 Underline=0 StrikeOut=0 CharSet=1 OutPrecision=0 ClipPrecision=0 Quality=5 PitchAndFamily=0 [IconFont] FaceName=Microsoft YaHei UI Height=9.000000 ...字段与LOGFONT结构一一对应(FaceName、Height、Width、Escapement、Orientation、Weight、Italic、Underline、StrikeOut、CharSet、OutPrecision、ClipPrecision、Quality、PitchAndFamily)。其中Height若为负值(如-16)则按像素直接作为lfHeight(Ver.2 格式);若为正值(如9.0)则按“点数”换算:lfHeight = -MulDiv(height, dpi, 72)(Ver.3 格式),DPI 由getSystemDPI()获取。
五、底层原理:程序是如何修改系统字体的
5.1 关键 API 调用链
No!! MeiryoUI 的字体写入集中在setFont()(program/noMeiryoUI.cpp),其核心流程为:
- 写入图标字体:调用
SystemParametersInfo(SPI_SETICONTITLELOGFONT, sizeof(LOGFONT), iconLogFont, SPIF_UPDATEINIFILE); - 广播图标设置变更:
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETICONTITLELOGFONT, ...); - 写入其余非客户区字体:通过
setFontAdjusted()调用SystemParametersInfo(SPI_SETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &realMetrics, SPIF_UPDATEINIFILE); - 广播窗口度量变更:
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, (LPARAM)_T("WindowMetrics"), ...)。
其中SPIF_UPDATEINIFILE标志表示将设置持久化写入用户配置文件(HKCU\Control Panel\Desktop等),这正是前文要求“先备份注册表”的根本原因。
setFontAdjusted()还会做两个额外调整:
- 若用户未使用预设(
!usePreset),根据新字体高度重新计算标题栏高度iCaptionHeight(避免标题栏过高); - 在 Windows 11(
majorVersion > 10)上,若iPaddedBorderWidth == 0,则按 DPI 补一个边框宽度,用于适配 Windows 11 的圆角窗口边框。
在菜单勾选“Set system fonts in separated thread”时,setFont()会通过_beginthreadex启动setOnThread线程执行SPI_SETNONCLIENTMETRICS(并等待最多 5 秒),避免该 API 阻塞 UI;否则在 UI 线程内直接同步执行。
5.2 当前字体读取与字号换算
程序启动时调用getActualFont():
- 通过
SPI_GETNONCLIENTMETRICS读取标题栏/菜单/消息框等字体; - 通过
SPI_GETICONTITLELOGFONT读取图标字体; - 若
lfHeight > 0则转为负数(统一为“字符高度”语义)。
字号换算由getFontPoint()(program/util.cpp)完成:基于LOGFONT创建临时字体,用GetTextMetrics取得tmAscent + tmDescent - tmInternalLeading后,按point = height * 72 / LOGPIXELSY换算为点数(pt)。
getFontPointInt()进一步实现了两种换算模式(由菜单“Calculate font size same as Windows 7”切换):
WIN8_SIZE = true(默认):8~10pt 区间按 Windows 7 方式四舍五入,其余直接取整(模拟 Windows 8 控制面板);WIN8_SIZE = false(Windows 7 兼容):统一采用“小数部分 > 0.49 则进位”的取整规则。
5.3 预设(Preset)的实现
setPreset()(program/util.cpp)负责把指定系统的默认字体组合写入NONCLIENTMETRICS与图标LOGFONT:字体名、字号、字符集来自语言文件[PRESET]段(如 lang/default.lng 中的CAPTION_FACE_8=Segoe UI、CAPTION_SIZE_8=11等),字号通过lfHeight = -MulDiv(size, dpiY, 72)换算,同时把iBorderWidth、iCaptionWidth、iScrollWidth等窗口度量按 DPI 缩放回默认值(Win8PresetWindowsMetric/Win10PresetWindowsMetric/Win11PresetWindowsMetric三个数组,默认同为{1, 36, 22, 17, 17, 22, 22, 19, 19, 4},对应 BorderWidth、TitleWidth、TitleHeight、ScrollWidth、ScrollHeight、PaletteWidth、PaletteHeight、MenuWidth、MenuHeight、Padding)。
5.4 多语言与配置文件
程序通过initializeLocale()检测系统 UI 语言,并按以下顺序寻找语言文件(program/noMeiryoUI.cpp 的setResourceFileName()):
语言-地区.lng(如zh-CN.lng);语言.lng(如zh.lng);- 兜底
default.lng。
lang/目录提供了default.lng、en.lng、ja-JP.lng、ko-KR.lng、pt-BR.lng、zh-CN.lng、zh-TW.lng共 7 份语言文件。语言文件同时包含[RESOURCE](界面文字)与[PRESET](各系统默认字体组合)两段。
程序自身还会读写noMeiryoUI.ini(位于 exe 同目录),保存两项设置(program/noMeiryoUI.cpp 的saveConfig()/loadConfig()):
[Settings] UIFontName=Microsoft YaHei UI RunMultiple=1UIFontName:No!! MeiryoUI 自身界面使用的字体;RunMultiple:1允许多实例,0禁止多实例(勾选“Don't run multiply”后写入0)。
六、已知问题与限制(重要)
根据 README_JA.md 与 README.md 官方说明:
6.1 无效区域
No!! MeiryoUI 对以下位置不起作用:
- Windows 任务栏(taskbar 字体不受该机制控制);
- 预装的 UWP 应用(如“设置”“画图”等),这些现代应用使用 XAML 体系渲染文字,不读取传统系统字体设置;
- 忽略系统字体设置的应用(例如自带字体渲染引擎的软件,如浏览器、Office 等)。
6.2 Windows 11 22H2 起的标题栏限制
从 Windows 11 2022 Update(22H2,build 22621)开始,无法再通过该系统字体机制修改标题栏字体。程序的行为如下:
- 检测到 build number > 22000(
compatLevel = 1)时,主界面禁用“Title bar”的选择按钮,并在启动时弹出警告消息框(MSG_WIN11_22H2RESTRICTION:"On Windows 11 2022 Update(22H2) and later due to Windows reason title bar font can't change.",见 lang/default.lng); - 应用字体时,若未勾选“Force title bar font change enabled”,程序会调用
set11TitlePreset()把标题栏字体**恢复为系统默认(Segoe UI)**后写入,即标题栏保持系统默认,其余部位正常生效; - 若在“Tools”菜单勾选
Force title bar font change enabled(并再次确认警告MSG_FORCE_TITLE_SET),可以强制尝试修改标题栏字体,但作者提示可能引发一些问题,属高风险操作。
6.3 杀毒软件误报
由于 No!! MeiryoUI 会修改系统字体注册表设置,部分杀毒软件可能将其误判为木马或病毒。这是修改系统设置的绿色工具常见的误报现象,并非程序本身恶意;若遇到误报,可将其加入杀软白名单,或先查看 LICENSE 与源码自证清白。
七、帮助文档与多语言资源
项目的帮助文档位于help/目录,按语言组织(en-us、ja-jp、ko-kr、pt-br、zh-cn、zh-tw),每套包含:
contents/01.html~04.html:使用说明正文(含界面截图noMeiryoUI.PNG、字体选择截图FontSel.PNG);contents/noMeiryoUI.css:帮助页样式;ToC.hhc:帮助目录树;help_*.hhp:HTML Help 工程文件(用于编译 .chm)。
程序内通过“Help → Help”调用hh.exe打开对应语言的帮助文件(showHelp(),program/noMeiryoUI.cpp),并把帮助窗口移动到主窗口所在显示器中央。
八、总结:适用场景与使用建议
- 适用场景:希望在 Windows 8.1/10/11 上统一替换系统 UI 字体(如将 Segoe UI 换成开源字体、中文字体等)的用户;需要把同一套字体配置批量部署到多台机器(配合 ini 配置文件与
-set命令行)的运维/装机场景;追求系统个性化且愿意承担注册表操作风险的高级用户。 - 操作纪律:先备份注册表(
reg save "HKCU\Control Panel" .\reset_font.reg /y)或使用 util/SAVEreg.bat,出问题时用 util/RESTOREreg.bat 还原并重启; - 预期管理:任务栏、UWP 应用、忽略系统字体设置的第三方应用不会受本工具影响;Windows 11 22H2+ 无法修改标题栏字体(除非勾选强制选项并接受风险);
- 安全提示:程序会写入注册表,可能触发杀软误报,请从官方 Release 渠道获取并核对哈希后再运行。
参考仓库文件索引
- README_JA.md:本文主体(系统要求、安装、已知问题、许可)
- README.md / README_CN.md:多语言 README 对照
- program/noMeiryoUI.cpp:主程序实现(命令行解析、字体读写、SPI 调用、配置持久化)
- program/noMeiryoUI.h:应用类与枚举定义
- program/util.cpp:DPI/字号换算、预设写入、版本识别
- program/util.h:公共常量与工具函数声明
- lang/default.lng:语言资源与预设字体组合
- util/SAVEreg.bat、util/RESTOREreg.bat:注册表备份/恢复脚本
- help/zh-cn/contents/01.html 等:多语言帮助文档
- LICENSE:MIT 开源协议
- 桌面应用
【免费下载链接】noMeiryoUI
No!! MeiryoUI is Windows system font setting tool on Windows 8.1/10/11.
相关推荐
Testcontainers Java 之 Elasticsearch 模块实战:容器化启动、安全配置与 Kibana 集成
Testcontainers Java 之 Elasticsearch 模块实战:容器化启动、安全配置与 Kibana 集成 导读 本指南基于 docs/mod
桌面应用No!! MeiryoUI终极指南:如何在Windows系统中完美自定义字体
No!! MeiryoUI终极指南:如何在Windows系统中完美自定义字体 No!! MeiryoUI是一款强大的Windows系统字体设置工具,专为Wind
桌面应用No!! MeiryoUI终极兼容性指南:Windows 8.1/10/11系统问题全解析
No!! MeiryoUI终极兼容性指南:Windows 8.1/10/11系统问题全解析 No!! MeiryoUI是一款专业的Windows系统字体设置工具
桌面应用
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考