在C#或VB.NET中,在WinForms类库或WPF下,并且不需要第三方应用程序或API,我想知道如何以与显示的相同方式检索文本字体文件的标题。右键单击文本字体文件,然后转到details属性页。
换句话说,我需要获得Windows注册表中将注册字体的确切名称,该名称与为我提供System.Drawing.FontFamily.Name
属性和System.Drawing.Font.Name
属性的名称都不相同
StackOverflow中有一些有关如何获取字体名称的问题,例如this和this,而字体标题则没有。
没有什么可以帮助我。我将举一个区别的例子:
我有一个真正的字体文件,文件名为“ OpenSans-Light.ttf”,在详细信息属性页面中显示为“ Open Sans Light”,但是使用基于System.Drawing.FontFamily
的解决方案,我得到了名称“无休假”。
然后,在我看到.NET Framework(WindowsForms)类库可能不提供获取字体标题的功能之后,我试图从Windows API中发现哪个功能可能正在使用Windows的Windows Shell扩展。文件详细信息属性表以获取字体标题...
...我什么也没找到,也没有信息,没有任何东西,只是GetFontData函数无法提供我所需的信息。
答案 0 :(得分:2)
我注意到“资源管理器”列表视图中的“标题”列显示了所需的确切字体名称字符串,因此知道这一点,然后我意识到可以通过使用Win32 Shell属性包装器轻松解决该问题。 WindowsAPICodePack 库以检索字体文件的Title属性。
我知道我请求的解决方案没有第三方库,但是我几乎可以肯定,这不是比使用此库更理想的解决方案,因为...嗯,一致的替代方案似乎实现了Win32 shell自己包装财产。
示例代码:
Imports Microsoft.WindowsAPICodePack.Shell
Dim diInfo As New DirectoryInfo("C:\Fonts\")
For Each fiInfo As FileInfo In diInfo.GetFiles("*.ttf", SearchOption.TopDirectoryOnly)
Dim sFile As ShellFile = ShellFile.FromFilePath(fiInfo.FullName)
Dim title As String = sFile.Properties.System.Title.Value
Dim sb As New StringBuilder()
sb.AppendLine(String.Format("Name.: {0}", fiInfo.Name))
sb.AppendLine(String.Format("Title: {0}", title))
Console.WriteLine(sb.ToString())
Next
示例输出:
Name.: OpenSans LightItalic.ttf
Title: Open Sans Light Italic
Name.: OpenSans Light_0.ttf
Title: Open Sans Light
Name.: OpenSans-Bold.ttf
Title: Open Sans Bold
Name.: OpenSans-BoldItalic.ttf
Title: Open Sans Bold Italic
Name.: OpenSans-ExtraBold.ttf
Title: Open Sans Extrabold
Name.: OpenSans-ExtraBoldItalic.ttf
Title: Open Sans Extrabold Italic
Name.: OpenSans-Italic.ttf
Title: Open Sans Italic
Name.: OpenSans-Light.ttf
Title: Open Sans Light
Name.: OpenSans-LightItalic.ttf
Title: Open Sans Light Italic
Name.: OpenSans-Regular.ttf
Title: Open Sans
Name.: OpenSans-Semibold.ttf
Title: Open Sans Semibold
Name.: OpenSans-SemiboldItalic.ttf
Title: Open Sans Semibold Italic
唯一缺少的是如果确实需要与Windows注册表中显示的字符串完全相同的字符串,请在字符串的末尾添加“(TrueType)”或“(OpenType)”(在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts
键中)。