修改 Win32 程序字体的简单的 hook 工具。可用于一些基于 GDI/GDI+ 或者 Qt 的程序。
经测试可用于 Telegram Desktop、Kleopatra (Gpg4Win) 和 Mendeley Desktop。
下载 FontMod{32,64,ARM,ARM64}.dll
并重命名为下列之一:
dinput8.dll
, dinput.dll
, dsound.dll
, d3d9.dll
, d3d11.dll
, ddraw.dll
, winmm.dll
, version.dll
, d3d8.dll
(d3d8.dll
仅支持 32 位)。
然后放在程序 exe 所在的文件夹里。
用户字体:把字体文件放在 fonts
文件夹内,可以直接使用,无需安装到系统中。
初次运行时会创建 FontMod.yaml
。配置文件使用 UTF-8 编码。支持 UTF-8 BOM。
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
#gdiplus:
# SimSun:
# replace: Microsoft YaHei
# Microsoft YaHei:
# size: 72.0
# style: regular
## style: 0
# unit: point
## unit: 3
#gdipGFFSansSerif: Calibri
#gdipGFFSerif: Times New Roman
#gdipGFFMonospace: Consolas
debug: false
-
fonts
key ("SimSun")
: 要修改的字体名称。replace
/name
: 要替换成的字体名称。size
width
weight
italic
underLine
strikeOut
charSet
outPrecision
clipPrecision
quality
pitchAndFamily
: 覆盖原始字体样式。请参见 MSDN 文档。如果不想覆盖的话请把这些项删除。
-
fixGSOFont 替换 GetStockObject 字体,选项与前面的
fonts
相同。若设为true
则会使用 SystemParametersInfo 获取系统字体。 -
gdiplus 替换 GDI+ 字体. 由于 GDI+ 的限制, 你只可以把一个字体替换成另一个 (
SimSun
->Microsoft YaHei
),或者修改某个字体的样式。key ("SimSun")
: 要修改的字体名称。replace
/name
: 要替换成的字体名称。size
: 字体大小。style
: 字体样式。允许的值为:regular
bold
italic
boldItalic
underline
strikeout
。或者你可以直接写 FontStyle enumeration 对应的整数值。unit
: 大小的单位。允许的值为:world
display
pixel
point
inch
document
millimeter
. 或者你可以直接写 Unit enumeration 对应的整数值。
-
gdipGFFSansSerif, gdipGFFSerif, gdipGFFMonospace 替换 GDI+ generic font family. (https://docs.microsoft.com/en-us/windows/win32/gdiplus/-gdiplus-fontfamily-flat)
-
debug 调试模式 (会记录相关信息到 FontMod.log)。
YAML 支持
锚点(&)
和引用(*)
(请参见 维基百科),此工具还支持 YAML 标准中非强制的键值合并 (Merge Key) 功能。你可以像上面的配置文件那样重复使用数据,而不需要像 JSON 那样把数据复制多份。
如果只想替换 CJK 字体,保留英文字体不变,你需要将
key
设为 CJK 的 fallback 字体。这个字体在不同语言环境下可能不一样 (比如简体中文是 SimSun),你可以使用 debug 模式找到对应的字体。