11

这个免费开源的「外挂」,让 Win32 老应用的字体更好看

 4 years ago
source link: https://sspai.com/post/58542
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Matrix 精选

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。

文章代表作者个人观点,少数派仅对标题和排版略作修改。

自 Windows 10 从 2014 年正式发行以来已经有快六年的时间了,然而六年后的今天,水深火热的 Windows 用户依旧要为 Windows 上一些使用着古老技术的客户端糟糕的字体渲染买单。以 Win32 为代表的一系列没有对中文进行「特色优化」的应用程序,如果没有设置好「回退字体」,那么无论你电脑屏幕的分辨率有多高,它们依旧会默认将中文等 CJK 字符渲染为万恶的「中易宋体」。

YfiqqyB.png!web 默认字体「中易宋体」的糟糕体验

关联阅读: 不输 MacType,这些优化思路也能让 Windows 字体细腻清晰

FontMod 是一款开源的「字体外挂软件」, 通过 DLL 注入的方法 将应用程序的字体渲染部分强行修改为我们希望的字体 —— 比如将「中易宋体」替换为「微软雅黑」。经过测试,FontMod 能够 有效修改使用 GDI 渲染引擎的 Win32 应用程序,以及一些基于 Qt 的应用程序。 比如,我就使用 FontMod 成功修改了 Mendeley Desktop 的字体。接下来我们就具体介绍一下怎样使用 FontMod 来修改应用程序的字体。

工作原理

事实上,FontMod 的工作原理非常简单易懂,和一些游戏外挂的原理类似。我们可以这样理解:FontMod 就是一个专门修改应用程序字体「外挂」,都是利用在原有程序的执行的基础之上,加载我们自己的 DLL。那么,这样的话,我们就可以在 DLL 中将应用程序字体渲染的部分逻辑进行修改,使得应用程序使用我们指定的字体进行显示。

zmy2aqa.png!web FontMod 的大致工作原理

不过,值得注意的是, DLL 注入 和「游戏外挂」一样,实际上都非常危险,能够将原先安全的应用程序核心数据进行篡改。如果 FontMod 不是一款开源软件,那么我是不会使用它,也不会推荐给大家使用。

下载 FontMod 动态链接库

FontMod 开源于 GitHub 上面,在其 最新 Release 的页面 ,我们可以直接下载 FontMod.dll 这个文件,也就是「字体外挂」的「动态链接库」。

yqERF3m.png!web FontMod 的 GitHub 页面

我们需要的只有这个 DLL 文件。下载成功之后,我们将文件重命名为 winmm.dll 并放在一旁备用。

让 FontMod 修改字体生效

Mendeley 是一个学术文献的管理应用,其客户端 Mendeley Desktop 应该是直接利用 Qt 编写的。另外,Mendeley 也不负众望,其客户端就连英文字体都渲染成了「中易宋体」… ‍ 我们以 Mendeley 为例子,具体介绍如何将 FontMod 挂载到主应用程序上,使之生效。

找到目标程序的安装目录

首先,我们需要找到 Mendeley 的安装目录。在 Windows 的开始菜单,右键点击 Mendeley,选择「更多 » 打开文件位置」,在打开的目录下选择 Mendeley 的快捷方式,再次右键,选择「打开文件所在位置」,不出意外的话,我们就进入了 Mendeley 的安装目录。

qa6VJjE.png!web 找到 Mendeley 的安装目录

仔细观察,我们可以看到 MendeleyDesktop.exe 这一可执行文件,也就是我们 Mendeley 客户端的本体。另外,下方还有一些带有 Qt 字样的 DLL 文件的蛛丝马迹,这些线索表明 Mendeley 客户端很大可能是直接使用跨平台 UI 框架 Qt 编写的,验证了我们的猜想。

接下来,我们拿到刚刚下载好,并更改名称为 winmm.dll 的 FontMod 文件,进行挂载的工作。

让 FontMod 挂载目标程序

我们将 winmm.dll 直接复制进入刚刚的 Mendeley 安装目录下,这一步骤可能需要「管理员权限」,如果提醒我们,点击授权即可。此时,如果我们尝试双击 MendeleyDesktop.exe 打开 Mendeley 客户端,很可能出现报错,提示你未找到一个名叫 FontMod.yaml 的文件。不必担心,这是正常现象。

Mendeley 默认安装位置位于 Windows C 盘的 Program Files 目录下,这一目录需要管理员权限才能创建文件,因此上一步中 FontMod 没有将自己的配置文件在第一次运行时成功创建,导致报错。我们需要在 Mendeley 的这一安装目录下手动创建一个名为 FontMod.yaml 的文件作为配置文件。

另外,如果你打开之后发现没有什么问题,那么很可能就是 FontMod 为我们创建好了这一文件,我们继续接下来的工作即可。

我们打开 FontMod.yaml 这一文件,如果里面没有任何东西(也就是你刚刚是手动创建的 FontMod 配置文件),那么我们需要向其中添加 FontMod 的默认配置内容:

style: &style
# Remove '#' to override font style
#  size: 0
#  width: 0
#  weight: 0
#  italic: false
#  underLine: false
#  strikeOut: false
#  charSet: 0
#  outPrecision: 0
#  clipPrecision: 0
#  quality: 0
#  pitchAndFamily: 0
​
fonts:
  SimSun: &zh-cn-font # Chinese (Simplified) fallback font
    replace: Microsoft YaHei
    <<: *style
  PMingLiU: # Chinese (Traditional) fallback font
    replace: Microsoft JhengHei UI
    <<: *style
  MS UI Gothic: # Japanese fallback font
    replace: Yu Gothic UI
    <<: *style
  Gulim: # Korean fallback font
    replace: 맑은 고딕
    <<: *style
​
fixGSOFont: true # true is to use system UI font
#fixGSOFont: *zh-cn-font # Or replace with user defined font
debug: false

另外,如果刚刚 FontMod 是自己创建的这一文件,那么很可能里面也已经拥有了以上配置,我们直接使用即可。

打开 Mendeley 客户端,查看效果

最后,我们打开 Mendeley 客户端,一切顺利的情况下,我们就可以看到其中糟糕的「中易宋体」已经被我们成功替换为「微软雅黑」了。

MjiMvmn.png!web 成功将字体替换为「微软雅黑」

配置 FontMod 的字体替换策略

如果没有特殊需求,那么默认的配置文件就已经可以直接将我们默认字体成功替换。但是如果有其他的字体替换需要,我们也可以通过刚刚的 FontMod 配置文件 FontMod.yaml   进行自定义。其中:

fonts:
  SimSun: &zh-cn-font # Chinese (Simplified) fallback font
    replace: Microsoft YaHei # 在这里定义替换字体
    <<: *style

这里就是将「中易宋体」,也就是 SimSun.TTF ,进行替换的配置部分,我们可以将 replace: 之后的字体 Microsoft YaHei 修改为我们希望的其他字体。其余部分中的 PMingLiUMS UI GothicGulim 配置项分别为繁体中文、日文与韩文的默认回退字体,没有特殊需要可以不用改动。

在配置文件上方,可以看到 style: &style 的定义。这里是对字体大小、字体形状以及字体是否加粗、是否斜体等情况的自定义。这里的配置请参考 Windows 官方文档: Windows GDI - LOGFONTW structure .

小结

FontMod 为我们提供了一个相对方便的字体替换功能,让我们能够在不使用「不是每台电脑都能完美工作」的 MacType 的情况下,将 Windows 应用程序的中易宋体进行替换。虽然 FontMod 可能仅仅对使用 GDI 渲染引擎的 Win32 应用程序起作用,但是也往往只有这些应用程序的字体渲染需要我们特殊照顾。

另外,针对文献管理应用而言,如果你觉得上面介绍的方法太过复杂,那么我推荐开源免费、没有中文字体渲染问题的 Zotero 来使用。

32Ara2f.png!web 开源免费,中文字体正确渲染的 Zotero

关联阅读: 免费开源的文献管理工具:Zotero 上手指南

希望本文的方法能让你成功改善你的 Win32 应用程序的显示效果,本文的介绍就到这里,感谢阅读。

> 下载少数派客户端、关注少数派公众号,找到更多 Windows 上的实用技巧 :zap:️

> 特惠、好用的硬件产品,尽在 少数派 sspai 官方店铺


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK