C++ 通过WinAPI提取字体版本

C++ 通过WinAPI提取字体版本,c++,winapi,fonts,C++,Winapi,Fonts,“Windows控制面板字体”窗口通常显示字体的版本信息。e、 g Font Name: Fontawesome Version: Version 4.3.0 2015 我已经在WindowsAPI中进行了搜索,但是我还没有找到如何以编程方式提取它 有什么想法吗?请注意,如果您正在谈论字体预览程序;这不是“Windows”,它实际上只是一个与操作系统捆绑在一起的小型实用程序应用程序。为了向您显示该信息,它从字体的名称表中查询信息(,每个记录id的语义在“名称id”部分中解释) 要自己访问这

“Windows控制面板字体”窗口通常显示字体的版本信息。e、 g

 Font Name: Fontawesome
 Version: Version 4.3.0 2015
我已经在WindowsAPI中进行了搜索,但是我还没有找到如何以编程方式提取它


有什么想法吗?

请注意,如果您正在谈论字体预览程序;这不是“Windows”,它实际上只是一个与操作系统捆绑在一起的小型实用程序应用程序。为了向您显示该信息,它从字体的
名称
表中查询信息(,每个
记录id的语义在“名称id”部分中解释)

要自己访问这些数据,请使用DirectWrite(而不是GDI,因为它是古老而过时的)方法,并获取对每个有效OpenType字体都包含的
name
表的引用。然后根据命名表的规范提取所需的值

需要明确的是:ttf
和otf字体都是OpenType字体,第一种是“使用TrueType表格布局编码轮廓的OpenType”,第二种是“使用CFF数据块编码轮廓的OpenType”。如果你不知道这两者之间的区别是什么,那是因为区别并不重要:就好像我们决定调用PNG文件
nil
ili
文件,这取决于它们是否使用隔行扫描


(文件扩展名
ttf
早于OpenType规范本身,因此当每个人都切换到OpenType字体时,该扩展名是为了向后兼容而保留的。几十年后,事实证明,继续这样做比决定“什么时候摆脱它”更容易,所以我们不得不将两个扩展名都用于同一种文件。历史!)

当你说“通常”时,你必须给操作系统命名。Windows 7、8、8.1和10不显示版本信息。@IInspectable-您可以在字体预览窗口中看到版本。谢谢您的回答。不幸的是,虽然我已经有了一些初步的东西构建,但我还没有设法理解我应该如何使用“openTypeTableTag”参数,而且似乎这个API的示例/文档非常少!您正在尝试提取“name”表,使用(根据文档链接)以下宏来形成表的标记参数:谢谢Mike!我最终还是设法做到了,数据似乎是正确的:)我发现在谷歌上找到的“wine”代码片段指向了正确的方向。