使用 python 在 Windows 上管理字体 installation/removal

Managing font installation/removal on Windows using python

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

我尝试手动执行它并且它确实有效(安装和删除字体)。但是在 python 中重新创建所有内容让我陷入了困境。我可以使用上述方法安装字体,但是当我尝试删除字体时 windows 告诉我 the font file is currently being used by "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

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