首页 > 解决方案 > 使用 python 在 Windows 上管理字体安装/删除

问题描述

经过一番研究,我发现我可以为当前用户安装一个 truetype 字体,只需在HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontsNAME 设置为字体名称并将 DATA 设置为字体路径的新字符串值。删除字体也类似,首先删除指定字体的字符串值,然后删除字体文件本身。

我尝试手动完成它并且它确实有效(安装和删除字体)。但是在 python 中重新创建所有内容让我陷入了一个问题。我可以使用上述方法安装字体,但是当我尝试删除字体时,windows 告诉我字体文件当前正在被 "System" 使用。我的程序能够删除注册表值,但无法删除字体文件。

我的帮助注册表编辑器功能可以在 -> https://github.com/nk521/phonts/blob/07a4d6de5165d5c19861c2f28708c60d52f33df9/core/helpers/win.py找到

这个函数安装一个字体-> https://github.com/nk521/phonts/blob/07a4d6de5165d5c19861c2f28708c60d52f33df9/core/win.py#L15

这个函数删除一个字体-> https://github.com/nk521/phonts/blob/07a4d6de5165d5c19861c2f28708c60d52f33df9/core/win.py#L35

此行将生成PermissionError-> https://github.com/nk521/phonts/blob/07a4d6de5165d5c19861c2f28708c60d52f33df9/core/win.py#L41

标签: pythonwindowsfonts

解决方案


在 Windows 上,GDI 可能会锁定已使用的字体文件。在该用户会话结束之前,您可能无法删除字体文件。如果您删除注册表项,则字体不会在下一个会话中加载到 GDI 中。尝试删除 reg 条目,然后注销并重新登录,这可能会解锁文件;或者如果它已将其锁定在不同的会话中,您可能需要重新启动。


推荐阅读