开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1219|回复: 16
收起左侧

[已解决] 怎么判断字体是否已安装

 关闭 [复制链接]
结帖率:90% (18/20)
发表于 2024-3-24 10:54:25 | 显示全部楼层 |阅读模式   四川省成都市
20精币
如果直接用字体_枚举w和取系统字体列表()来获取已安装的字体名称的话,获取的名称会重名,因为正常字体全称是(字体名称+字体样式(粗、斜)),而这两个命令获取的名称有些是不完全的
,比如我上传的字体文件中安装后(AvenirLTPro-Oblique.otf、AvenirLTPro-Roman.otf)获取系统的字体列表,只有“AvenirLTPro-Roman”,我查了相关资料,貌似EnumFontFamiliesExW函数通过传入参数可以获取到具体的样式信息、全称,但是我不会用,大佬帮忙看看,写个例程,感激不尽

EnumFontFamiliesEx函数地址:https://learn.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-enumfontfamiliesexw

字体.zip

64.12 KB, 下载次数: 4

AvenirLTPro-Oblique.otf、AvenirLTPro-Roman.otf

最佳答案

查看完整内容

[e=1].版本 2 .支持库 spec .子程序 __启动窗口_创建完毕 .局部变量 i, 整数型 调试输出 (判断字体是否存在 (“Avenir LT Pro 55 Roman”, “AvenirLTPro-Oblique”)) .子程序 判断字体是否存在, 逻辑型, 公开 .参数 字体名称, 文本型 .参数 字体全称, 文本型, 可空 .局部变量 hdc, 整数型 .局部变量 lpLogfont, 整数型 .局部变量 lfFaceName, 字节集 .局部变量 ret, 整数型 .局部变量 i, 整数型 lfFaceName = 编码_Ansi到Uni ...

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:100% (26/26)
发表于 2024-3-24 10:54:26 | 显示全部楼层   山西省太原市
  
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
变量名类 型静态数组备 注
i整数型 
调试输出 (判断字体是否存在 (“Avenir LT Pro 55 Roman”, “AvenirLTPro-Oblique”))
子程序名返回值类型公开备 注
判断字体是否存在逻辑型 
参数名类 型参考可空数组备 注
字体名称文本型
字体全称文本型
变量名类 型静态数组备 注
hdc整数型 
lpLogfont整数型 
lfFaceName字节集 
ret整数型 
i整数型 
lfFaceName = 编码_Ansi到Unicode (字体名称)
hdc = GetDC (0)
lpLogfont = LocalAlloc (64, 92)
' lpLogfont.lfCharSet = 1
__set_byte (lpLogfont, 23, 1)
' lpLogfont.lfFaceName = lfFaceName
计次循环首 (取字节集长度 (lfFaceName), i)
__set_byte (lpLogfont, 28 + i - 1, lfFaceName [i])
计次循环尾 ()
ret = EnumFontFamiliesExW (hdc, lpLogfont, 到整数 (&EnumFontFamProc), 取变量数据地址 (字体全称), 0)
LocalFree (lpLogfont)
ReleaseDC (0, hdc)
返回 (选择 (ret = 2, 真, ))
子程序名返回值类型公开备 注
EnumFontFamProc整数型 
参数名类 型参考可空数组备 注
lpelfe整数型
lpntme整数型
FontType整数型
lParam整数型
变量名类 型静态数组备 注
字体全称文本型 
字体全称 = 指针到文本 (lParam)
如果真 (取文本长度 (字体全称) = 0)
返回 (2)
如果真 (编码_Unicode到Ansi (指针_到字节集W (lpelfe + 92)) = 字体全称)
' elfStyle
' 编码_Unicode到Ansi (指针_到字节集W (lpelfe + 220))
返回 (2)
返回 (1)


i支持库列表   支持库注释   
spec特殊功能支持库

点评

666大佬牛批   四川省成都市  发表于 2024-3-24 22:49

评分

参与人数 2好评 +2 精币 +1 收起 理由
123456ppt + 1 哈哈哈哈早晚笑死在点评区哈哈哈哈
shiyue十月 + 1 + 1 又测试了一遍,其他字体就不行了,这个是专门针对这两个字体写的.

查看全部评分

回复

使用道具 举报

结帖率:47% (9/19)

签到天数: 20 天

发表于 2024-3-24 11:05:36 | 显示全部楼层   广东省广州市
.版本 2
.支持库 eAPI
.支持库 spec

.局部变量 font, 文本型, , "0"

font = 取系统字体列表 ()
调试输出 (font)
回复

使用道具 举报

结帖率:90% (18/20)

签到天数: 8 天

 楼主| 发表于 2024-3-24 11:20:02 | 显示全部楼层   四川省成都市
gdhong 发表于 2024-3-24 11:05
.版本 2
.支持库 eAPI
.支持库 spec

注意审题呀  取系统字体列表和字体_枚举w  取的字体名称有些是不全的   两个字体(ABC-123和ABC-321),都显示ABC没法进行对比来判断是否安装过了,得把全称都取出来才能判断
回复

使用道具 举报

结帖率:56% (19/34)

签到天数: 23 天

发表于 2024-3-24 11:25:57 | 显示全部楼层   广西壮族自治区贺州市
你别管它是否安装啊,每次启动软件都执行安装一次不就行了呗。。。
回复

使用道具 举报

结帖率:47% (9/19)

签到天数: 20 天

发表于 2024-3-24 11:34:32 | 显示全部楼层   广东省广州市
安装后,字体AvenirLTPro-Oblique找不到
回复

使用道具 举报

结帖率:47% (9/19)

签到天数: 20 天

发表于 2024-3-24 11:35:18 | 显示全部楼层   广东省广州市
捕获.PNG
回复

使用道具 举报

结帖率:47% (9/19)

签到天数: 20 天

发表于 2024-3-24 11:50:43 | 显示全部楼层   广东省广州市
用WORD也可以查找字体,当字体不存在时,怎能查到?如下代码也可以查找字体,使用了EnumFontsA函数:https://www.eyuyan.la/?a=down&pid=6655
回复

使用道具 举报

结帖率:47% (9/19)

签到天数: 20 天

发表于 2024-3-24 11:58:13 | 显示全部楼层   广东省广州市
为系统添加字体.e (4.14 KB, 下载次数: 8)
回复

使用道具 举报

结帖率:90% (18/20)

签到天数: 8 天

 楼主| 发表于 2024-3-24 11:58:28 | 显示全部楼层   四川省成都市
gdhong 发表于 2024-3-24 11:34
安装后,字体AvenirLTPro-Oblique找不到

不是找不到,是这两个字体是一个字体系列的   后面的内容是字体样式  而取字体列表  只能取到这个字体的系列名称   具体到样式就看不到了  但是你用在系统设置-字体设置-列表中可以看到这两个字体



QQ截图20240324115325.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表