前面很多篇文章都在试图把 Windows 系统中出现宋体(特别是它的点阵字)的概率降到最低,并且保留较为原汁原味的宋体以备文档打印之需。实践中可行的方法主要是修改字体链和去掉宋体中的点阵,但这种办法对付不了在软件里写死要用宋体的情况,除了劝软件作者改字体外基本没啥好办法,这种软件就只能睁一只眼闭一只眼了。
然而依然有不少软件固执的显示着去掉了点阵的宋体(比如最近正在琢磨的 FreeCAD 和配置 Mikrotik 设备的 winbox),这些软件并非来自国内工程师,难道外国工程师也很中意宋体?显然不是的,肯定是中文的系统有个默认值,把没有指定字体的软件显示为此默认字体。私认为这应该是最后一点日常碰得到宋体的情况了,为了把这一点阴魂不散的宋体去掉,需要找到这个默认值。
用 simsun 为关键字搜索注册表,发现了这么一个键:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\GRE_Initialize\GUIFont.Facename,其原始值为 SimSun。看微软的说明不太清楚这个键值的用途,看起来应该是和 GUI 字体有关,试着改成了前面做的字体链字体,然后就成功了。这下子应该不太容易看到宋体了吧(瞎说的)。
效果如下(点击看原图) ,一同附上的两张图来自《干掉丑陋的点阵字》。
ps. 这里的阴魂不散指的主要是在用户并没有指定使用宋体时显示宋体,或者根本就没有选项可以设置字体而默认显示宋体的情况。像文档、网页等指定了宋体而显示宋体的情况除外。
ps. GUIFont.Facename 也不是随便改就能行,有些软件(比如上面用来做例子的 Google Earth)由于不认字体链,如果设置了需要调用字体链才能显示中文的字体(比如 Segoe UI)还是会显示出宋体。保险的做法是这里设定一个有中文字符的字体,故建议用前面做的字体链字体。
一针见血解决了问题,太感谢了!之前 FontLink/Substitutes 怎样都搞不定一些软件 UI 用宋体。