在Windows系统上使用Python安装TTF字体

5
我想在Windows中使用Python 2.7安装新字体。首先,我将 myFont.ttf 复制到Windows的Fonts文件夹,然后我向注册表(HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts)添加了“My Font (True Type)”键。现在,我想通知系统已经安装了新字体。为此,我发现应该使用win32api.SendMessage,但是我不知道如何为此方法提供所需的参数。
有没有办法使用Python在Windows上安装ttf字体?我搜索了一下,但是在Python方面找不到有用的数据。
1个回答

6
import win32api
import win32con
import ctypes

ctypes.windll.gdi32.AddFontResourceA("C:\\Users\\Username\\Desktop\\fontname.ttf")
win32api.SendMessage(win32con.HWND_BROADCAST, win32con.WM_FONTCHANGE)

2
避免使用ctypes.windll(在全局缓存函数指针对象中使用是一个坏主意);避免使用传统的[A]NSI API(Windows文件系统路径本地支持UTF-16;不要将自己置于20世纪80年代的8位代码页框中);并检查返回值:gdi32 = ctypes.WinDLL('gdi32'); result = gdi32.AddFontResourceW(u"C:\\Users\\Username\\Desktop\\fontname.ttf") - Eryk Sun
@ErykSun包自动将Unicode字符串转换为UTF-16吗? 不能指望Python最新版本中字符串的内部表示方式。 - Mark Ransom
@MarkRansom,这是ctypes参数解析的一个函数,而不是ctypes.CDLL的子类ctypes.WinDLL。如果函数指针的argtypes属性未设置,则Unicode参数将作为wchar_t *字符串传递,无论如何都必须这样做。在3.x中,ctypes调用PyUnicode_AsWideCharString并在胶囊对象中保留内存引用,直到调用返回(即,如果库将保留对字符串的引用,请不要依赖此自动转换)。在Windows中,宽字符字符串将是UTF-16,非BMP代码将使用代理对。 - Eryk Sun
它就是不起作用。代码已执行,但没有添加到我的字体中。 - greendino

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接