【问题标题】:Installing TTF fonts on windows with python用python在windows上安装TTF字体
【发布时间】:2013-11-15 01:51:40
【问题描述】:

我想用 Python 2.7 在 Windows 上安装新字体。首先我将myFont.ttf 复制到Windows Fonts 文件夹,然后我将我的字体(True Type)键添加到注册表(HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts)。现在我想声明系统已经安装了新字体。为此我发现我应该使用win32api.SendMessage,但是我不知道如何为这个方法提供所需的参数?

有没有用python在windows上安装ttf字体?我用谷歌搜索了它,但在 Python 上找不到有用的数据。

【问题讨论】:

    标签: python-2.7 truetype sendmessage


    【解决方案1】:
    import win32api
    import win32con
    import ctypes
    
    ctypes.windll.gdi32.AddFontResourceA("C:\\Users\\Username\\Desktop\\fontname.ttf")
    win32api.SendMessage(win32con.HWND_BROADCAST, win32con.WM_FONTCHANGE)
    

    【讨论】:

    • 避免ctypes.windll(使用全局缓存的函数指针对象是个坏主意);避免使用旧的 [A]NSI API(Windows 文件系统路径本身是 UTF-16;不要将自己置于 1980 年代的 8 位代码页框中);并检查返回值:gdi32 = ctypes.WinDLL('gdi32');result = gdi32.AddFontResourceW(u"C:\\Users\\Username\\Desktop\\fontname.ttf")
    • @ErykSun WinDLL 包会自动将 Unicode 字符串转换为 UTF-16 吗?在最新版本的 Python 中,你不能指望字符串的内部表示。
    • @MarkRansom,它是 ctypes 参数解析的函数,而不是 ctypes.CDLLctypes.WinDLL 子类。如果未设置函数指针的 argtypes 属性,则 Unicode 参数将作为 wchar_t * 字符串传递,无论必须做什么来获得它。在 3.x 中,ctypes 调用 PyUnicode_AsWideCharString 并在胶囊对象中保留对内存的引用,直到调用返回(即,如果库将保留对字符串的引用,则不要依赖此自动转换)。在 Windows 中,宽字符串将是 UTF-16,并带有非 BMP 代码的代理对。
    • 这行不通。代码已执行,但没有添加到我的字体中
    猜你喜欢
    • 2023-03-25
    • 2016-02-25
    • 1970-01-01
    • 2017-06-09
    • 2021-08-26
    • 2018-12-13
    • 2018-12-17
    • 1970-01-01
    • 2012-03-14
    相关资源
    最近更新 更多