修改 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 模式找到對應的字型。