Windows 注册表中的 OpenType 字体

OpenType fonts in the Windows Registry

我正在编写一个 PowerShell 脚本来在 Windows 中安装 TrueType 和 OpenType 字体。 该脚本在 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts 中添加注册表项并将字体文件复制到 C:\Windows\Fonts。 如果我不这样做,只将文件复制到字体目录 Windows,则会自动在用户 space 中安装字体(C:\Users\UserName\AppData\Local\Microsoft\Windows\Fonts).

我可以看到我计算机上的少数 OpenType 字体和 Windows 安装的有一个字符串名称,如 "FontName (TrueType) " 在注册表中,即使它们是 OpenType 字体?? 如果名称是“FontName (OpenType)”不是更有意义吗?

这方面有标准吗?

为了在系统中注册和枚举字体,用于条目名称的字符串没有意义。名为 "spam" 的条目与 "Arial Regular (TrueType)" 或 "Arial Regular (OpenType)" 一样有效。重要的是该键的唯一性。

但是,为了维护注册表——安装或删除字体,以及在升级过程中迁移或迁移到新系统——OS 的某些部分期望条目名称具有特定的名称格式。因此,即使字体可以被视为 OpenType 字体,您也应该使用模板“(TrueType)”作为条目名称。

正如其他人在评论中指出的那样,TrueTypeOpenType 的区别是模糊的。大多数可能被视为 TrueType 字体的字体都符合 OpenType 字体的条件,但不是全部;特别是,MacOS 的某些字体使用 Apple 的 TrueType 参考手册中定义的扩展,但未在 OpenType 规范中定义。 OpenType 规范有几个扩展没有包含在 Apple 的 TrueType 参考手册中。

但就您的目的而言,TT 与 OT 的区别无关紧要。始终在注册表中使用“(TrueType)”。