运行此程序前,需确保电脑系统中已包含 gdi32.dll 动态链接库(系统通常默认自带)。
在「dll 命令定义表」中添加以下内容:
.版本 2 .DLL命令 GetFontResourceInfoW, 逻辑型, "gdi32.dll", "GetFontResourceInfoW", , 系统_取字体名 .参数 pwszFontPath, 字节集 .参数 lLen, 整数型, 传址 .参数 fontRes, FONT_RESOURCE .参数 dwType, 整数型
在「自定义数据类型表」中添加以下内容:
.版本 2 .数据类型 FONT_RESOURCE, , 系统_取字体名 .成员 dwDup, 整数型, , "1024" .成员 wszFontName, 短整数型, , "1024"
在「程序集」中添加以下代码:
.版本 2 .子程序 取字体名, 文本型, 公开, 获取字体完整名称 族名+样式名 .参数 字体文件名, 文本型, , 输入字体完整路径——爱来自bk.jyang.ren .局部变量 szPath, 文本型 .局部变量 FontsPath, 文本型 .局部变量 fontRes, FONT_RESOURCE .局部变量 Length, 整数型 .局部变量 FontsName, 文本型 .局部变量 exists, 逻辑型 szPath = 字体文件名 exists = 文件是否存在 (szPath) .如果 (exists) AddFontResourceA (szPath) .否则 FontsPath = 取空白文本 (256) SHGetSpecialFolderPathA (0, FontsPath, 20, 假) szPath = FontsPath + “\” + szPath .如果结束 GetFontResourceInfoW (编码_Ansi到Unicode (szPath, ), Length, fontRes, 1) GetFontResourceInfoW (编码_Ansi到Unicode (szPath, ), Length, fontRes, 1) ' FontsName = 编码_Unicode到Ansi (到字节集 (fontRes.wszFontName)) FontsName = 编码_Unicode到Ansi (到字节集 (fontRes.dwDup)) .如果真 (exists) RemoveFontResourceA (szPath) .如果真结束 返回 (FontsName)
调用时直接使用 取字体名 子程序
需传入字体文件的完整路径作为参数
函数返回值为字体的完整名称(族名 + 样式名)
该实现通过调用系统 gdi32.dll 中的 GetFontResourceInfoW 函数,获取指定字体文件的完整名称。程序会先检查字体文件是否存在,若不存在则尝试从系统字体目录中查找,处理完成后会自动清理临时加载的字体资源,避免占用系统资源。