在Windows中使用python安装字体

2024-10-01 09:31:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个python脚本来安装Windows中的字体列表。 我有一张这样的单子

fonts_list = ["/path/to/file/myFont1.ttf", "/path/to/file/myFont1.ttf", "/path/to/file/myFont1.ttf"]

我只是尝试了一下,用shutil和os复制字体文件,然后我试着把它添加到Windows注册表中,即使有管理员权限,也没用。脚本的输出没有显示任何错误,但是在列表中提到的Windows字体目录中没有任何字体。在

^{pr2}$

所以我开始从网上寻找更多的种子,然后我找到了这个,Installing TTF fonts on windows with python。但也没用。接下来我试着给Windows打电话字体视图,但对于字体列表来说,这是一场灾难。在

os.system("fontview " + fontsList[0])

有没有办法在windows中以编程方式安装字体?或者在Windows中有没有用户级目录来简单地复制字体文件,比如Linux系统有~/.fonts和mac有~/Library/fonts?请帮忙。在


Tags: 文件topath目录脚本列表oswindows
1条回答
网友
1楼 · 发布于 2024-10-01 09:31:18

这里有一个install_font函数,可以将字体复制到系统字体文件夹,在当前会话中加载它,通知正在运行的程序,并更新注册表。它只依赖于Python的标准库,应该可以在python2和python3中使用。在

c类型定义

import os
import shutil
import ctypes
from ctypes import wintypes

try:
    import winreg
except ImportError:
    import _winreg as winreg

user32 = ctypes.WinDLL('user32', use_last_error=True)
gdi32 = ctypes.WinDLL('gdi32', use_last_error=True)

FONTS_REG_PATH = r'Software\Microsoft\Windows NT\CurrentVersion\Fonts'

HWND_BROADCAST   = 0xFFFF
SMTO_ABORTIFHUNG = 0x0002
WM_FONTCHANGE    = 0x001D
GFRI_DESCRIPTION = 1
GFRI_ISTRUETYPE  = 3

if not hasattr(wintypes, 'LPDWORD'):
    wintypes.LPDWORD = ctypes.POINTER(wintypes.DWORD)

user32.SendMessageTimeoutW.restype = wintypes.LPVOID
user32.SendMessageTimeoutW.argtypes = (
    wintypes.HWND,   # hWnd
    wintypes.UINT,   # Msg
    wintypes.LPVOID, # wParam
    wintypes.LPVOID, # lParam
    wintypes.UINT,   # fuFlags
    wintypes.UINT,   # uTimeout
    wintypes.LPVOID) # lpdwResult

gdi32.AddFontResourceW.argtypes = (
    wintypes.LPCWSTR,) # lpszFilename

# http://www.undocprint.org/winspool/getfontresourceinfo
gdi32.GetFontResourceInfoW.argtypes = (
    wintypes.LPCWSTR, # lpszFilename
    wintypes.LPDWORD, # cbBuffer
    wintypes.LPVOID,  # lpBuffer
    wintypes.DWORD)   # dwQueryType

函数定义

^{pr2}$

相关问题 更多 >