MS Shell Dlg
在典型的英语机器上,更改和MS Shell Dlg 2
下的值FontSubstitutes
将修改系统范围内菜单上使用的字体。但是,它似乎在我的非英语机器上不起作用。据我所知,应用的字体仍然是 Microsoft JhengHei UI。
另一种方法根据这个帖子是编辑中的条目HKCU\Control Panel\Desktop\WindowMetrics
,但是它们都是二进制的,我真的不知道如何编辑它们,尽管这似乎是实际更改字体的正确位置。
根据微软技术网,下面的条目的默认值WindowMetrics
是MS Shell Dlg
[ 2
]。但在我的计算机上是。这解释了为什么首先Microsoft JhengHei UI
更改字体替换不起作用。MS Shell Dlg
F4 FF FF FF 00 00 00 00 random bytes but probably control characters
00 00 00 00 00 00 00 00
90 01 00 00 00 00 00 01
00 00 00 00 4D 00 69 00 main string starts here
63 00 72 00 6F 00 73 00
.........
(ôÿÿÿMicrosoft JhengHei UI)
问题是,如何编辑这个二进制值?填充字节有什么00
用?还有它的F4 FF FF FF
含义是什么?
(我觉得 SO 可能是发布此问题的更好的地方。如果您认为在 SO 上提问更合适,请将此问题迁移到那里。)
根据这个地点,它包含“有关 Windows 使用的字体、大小和其他选项(普通、粗体、斜体)的信息”。但是,它没有解释这些信息在字符串中是如何排列的。
我也读过,它只是一个二进制文件LOGFONT 结构。我该如何编辑它?有没有什么工具可以编辑?
答案1
好了,我相信我了解了这个二进制字符串的结构。它的格式是日志字体,分为14个部分,包括前20个字节为4个小端序的长整数,接下来的8个字节为字节,以及一个字符串。
在我的示例中,F4 FF FF FF
表示高度FFFFFFF4
为十六进制(长整型),即-11
十进制。将其转换为像素将是 8。
下一个00 00 00 00
表示宽度。将其设置为 0 将自动计算。
接下来的 8 个字节对应于和lfEscapement
,lfOrientation
但这并不重要。
接下来的4个字节(十进制为400)90 01 00 00
是190
权重。400对应于FW_NORMAL
。
接下来的 3 个字节是lfItalic
、lfUnderline
和lfStrikeOut
。非常不言自明。
下一个字节是lfCharSet
。它表示根据此字节要使用的字符集枚举。0x01
将会DEFAULT_CHARSET
。
接下来的 4 个字节用于其他内容:lfOutPrecision
,,,。lfClipPrecision
lfQuality
lfPitchAndFamily
接下来是主要部分。接下来的 64 个字节是要在 32 个 TCHAR 中使用的字体名称的字符串。对于 ASCII 字符,只需用 分隔每个字符,00
因为 TCHAR 只是 16 位 Unicode。
综上所述,要改变系统UI各部分的字体,只需按照上面的结构修改二进制条目即可。
PS:更改 (2) 的替代品MS Shell Dlg
并不适用于所有人,因为并非所有 Windows 语言都使用它作为 UI 字体。另一个地点提到此评论将字体名称Segoe UI
直接替换为您想要的字体也不起作用,并且副作用是您根本无法使用该字体Segoe UI
。
修改WindowMetrics
可能是改变系统字体的唯一正确方法。