列出Windows 10通用应用程序中已安装的字体名称

本文关键字:安装 字体 Windows 10通 应用程序 列出 | 更新日期: 2023-09-27 18:20:52

我正在C#中构建一个Windows 10通用应用程序,该应用程序必须列出系统上安装的字体的名称。该应用程序是一个metro/modern ui/windows 8.1应用程序,我在那里使用了SharpDX"技巧"来获取名称。

SharpDX不适用于Windows 10 UAP(目前?),因此不再适用。

还有其他方法可以实现我的目标吗?我应该考虑在推荐字体下列出一个固定的字体名称列表吗?例如,在桌面上,这似乎相当有限。

提前感谢!

列出Windows 10通用应用程序中已安装的字体名称

相同的基本思想:仍然使用DirectWrite来获取字体名称。

您可以在Windows 8.1和通用Windows平台应用程序中使用Win2D从C#访问DirectWrite。CanvasTextFormat.GetSystemFontFamilies将返回字体系列:

string[] fonts = Microsoft.Graphics.Canvas.Text.CanvasTextFormat.GetSystemFontFamilies();
foreach (string font in fonts)
{
    Debug.WriteLine(string.Format("Font: {0}", font));
}

我决定采用固定列表方法。它不需要Win2D。

如果有人感兴趣,以下是保证在所有支持UWP应用程序的Windows 10版本中可用的字体列表:

分析自https://msdn.microsoft.com/en-us/library/windows/apps/hh700394.aspx

public static string[] FontNames = {
    "Arial", "Calibri", "Cambria", "Cambria Math", "Comic Sans MS", "Courier New",
    "Ebrima", "Gadugi", "Georgia",
    "Javanese Text Regular Fallback font for Javanese script", "Leelawadee UI",
    "Lucida Console", "Malgun Gothic", "Microsoft Himalaya", "Microsoft JhengHei",
    "Microsoft JhengHei UI", "Microsoft New Tai Lue", "Microsoft PhagsPa",
    "Microsoft Tai Le", "Microsoft YaHei", "Microsoft YaHei UI",
    "Microsoft Yi Baiti", "Mongolian Baiti", "MV Boli", "Myanmar Text",
    "Nirmala UI", "Segoe MDL2 Assets", "Segoe Print", "Segoe UI", "Segoe UI Emoji",
    "Segoe UI Historic", "Segoe UI Symbol", "SimSun", "Times New Roman",
    "Trebuchet MS", "Verdana", "Webdings", "Wingdings", "Yu Gothic",
    "Yu Gothic UI"
};

特别是,对于我的应用程序,我从这个列表中删除了一些我不感兴趣的内容,比如Javanese Text Regular Fallback font for Javanese script加上那些Microsoft *亚洲语言,以及Segoe MDL2 Assets加上(Web|Wing)dings,它们只用于图标。