拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

No!! MeiryoUI(Meiryo UIも大っきらい!!)完全指南:在 Windows 8.1/10/11 上恢复系统字体自定义能力

No!! MeiryoUI(Meiryo UIも大っきらい!!)完全指南:在 Windows 8.1/10/11 上恢复系统字体自定义能力
  • 桌面应用

【免费下载链接】noMeiryoUI

No!! MeiryoUI is Windows system font setting tool on Windows 8.1/10/11.

项目地址:https://gitcode.com/gh_mirrors/no/noMeiryoUI
点击查看免费下载

本指南以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)分发,无需安装程序:

  1. 从项目的 Releases 页面下载 zip 格式压缩包(README 中指向 GitHub Releases 最新版);
  2. 解压压缩包;
  3. 直接运行解压目录中的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):

  1. 所有字体设置(All font setting):一个字体选择框 + “全部应用并退出(Apply all and exit)”按钮,用于一键把同一字体应用到所有系统 UI 位置;
  2. 单独字体设置(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 操作流程

  1. 启动noMeiryoUI.exe,程序自动读取当前系统各部位的字体并在文本框中显示“字体名 + 点数(pt)”;
  2. 在“所有字体设置”中点击Select...,或对每个单独条目分别选择字体;
  3. 选择字体时可指定字族、字形(粗体/斜体/下划线/删除线)、字号与字符集(FontSel 对话框,界面截图见 help/zh-cn/contents/FontSel.PNG);
  4. 应用方式:
    • 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),其核心流程为:

  1. 写入图标字体:调用SystemParametersInfo(SPI_SETICONTITLELOGFONT, sizeof(LOGFONT), iconLogFont, SPIF_UPDATEINIFILE);
  2. 广播图标设置变更:SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETICONTITLELOGFONT, ...);
  3. 写入其余非客户区字体:通过setFontAdjusted()调用SystemParametersInfo(SPI_SETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &realMetrics, SPIF_UPDATEINIFILE);
  4. 广播窗口度量变更: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()):

  1. 语言-地区.lng(如zh-CN.lng);
  2. 语言.lng(如zh.lng);
  3. 兜底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=1
  • UIFontName: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.

项目地址:https://gitcode.com/gh_mirrors/no/noMeiryoUI
点击查看免费下载
上一篇:云容器与 Kubernetes 安全评估实战指南:基于 cloud-k8s 技能的四阶段审计工作流
下一篇:BundleTrack进阶指南:特征提取网络与视频分割模块的参数调优策略

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表