Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
正确安装字体到Windows系统:避免直接复制到Fonts文件夹_创想鸟

正确安装字体到Windows系统:避免直接复制到Fonts文件夹

正确安装字体到windows系统:避免直接复制到fonts文件夹

本文旨在指导开发者如何在Windows系统中正确安装字体,避免直接复制字体文件到C:WindowsFonts文件夹,并解释了为什么这种方法不可行。我们将介绍使用AddFontResource API的正确方法,并提供示例代码,帮助开发者在程序中实现字体的安装功能。

直接将字体文件复制到C:WindowsFonts文件夹在大多数情况下是不可行的,因为Fonts文件夹并非一个普通的物理文件夹,而是Windows Shell命名空间扩展,它实际上是从注册表中枚举已安装的字体,并以文件夹的形式呈现。因此,尝试直接复制文件会因权限或其他原因失败。正确的做法是使用Windows API函数AddFontResource来安装字体。

使用AddFontResource API安装字体

AddFontResource函数可以将字体文件添加到系统字体表中。需要注意的是,使用此方法添加的字体仅在当前会话有效,系统重启后字体将失效。如果需要永久安装字体,还需要修改注册表。

以下是使用AddFontResource API安装字体的Python示例代码:

import ctypesimport osdef install_font(font_path):    """    安装字体到系统字体目录.    Args:        font_path: 字体的完整路径.    """    try:        # 加载gdi32.dll        gdi32 = ctypes.windll.gdi32        # 调用AddFontResourceW函数        result = gdi32.AddFontResourceW(font_path)        # 检查是否安装成功        if result == 0:            print(f"安装字体失败: {font_path}")            return False        else:            print(f"成功安装字体: {font_path}")        # 发送WM_FONTCHANGE消息,通知所有顶层窗口字体已经改变        import win32gui        import win32con        win32gui.SendMessage(win32con.HWND_BROADCAST, win32con.WM_FONTCHANGE, 0, 0)        return True    except Exception as e:        print(f"安装字体时发生错误: {e}")        return False# 示例用法font_path = os.path.abspath("Copperplate.ttf") # 确保字体文件存在if install_font(font_path):    print("字体安装完成!")else:    print("字体安装失败!")

代码解释:

导入必要的库:

ctypes:用于调用Windows API。os:用于处理文件路径。win32gui和win32con:用于发送Windows消息(需要安装pywin32库:pip install pywin32)。

加载gdi32.dll:

gdi32 = ctypes.windll.gdi32:加载Windows图形设备接口库。

调用AddFontResourceW函数:

result = gdi32.AddFontResourceW(font_path):调用AddFontResourceW函数,该函数接受字体文件的完整路径作为参数。W后缀表示Unicode版本,支持中文等字符。

检查安装结果:

if result == 0::如果返回值为0,表示安装失败。

发送WM_FONTCHANGE消息:

win32gui.SendMessage(win32con.HWND_BROADCAST, win32con.WM_FONTCHANGE, 0, 0):发送WM_FONTCHANGE消息,通知所有顶层窗口字体已经改变。这确保了应用程序能够立即识别并使用新安装的字体。

异常处理:

try…except:捕获可能发生的异常,例如文件不存在或权限问题。

注意事项:

需要安装pywin32库才能使用win32gui和win32con模块:pip install pywin32。确保字体文件路径正确,并且程序具有读取该文件的权限。此方法安装的字体仅在当前会话有效。如果需要永久安装字体,请参考下面的注册表修改部分。如果用户没有管理员权限,AddFontResource可能会失败。

永久安装字体(修改注册表)

如果需要永久安装字体,需要修改注册表。以下是一个示例:

import winregimport osdef install_font_permanently(font_path):    """    永久安装字体到系统字体目录 (需要管理员权限).    Args:        font_path: 字体的完整路径.    """    try:        # 获取字体文件名        font_name = os.path.basename(font_path)        # 打开注册表键        key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, "SOFTWAREMicrosoftWindows NTCurrentVersionFonts", 0, winreg.KEY_ALL_ACCESS)        # 设置字体值        winreg.SetValueEx(key, font_name[:-4], 0, winreg.REG_SZ, font_name) # 去掉.ttf后缀        # 关闭注册表键        winreg.CloseKey(key)        # 通知系统字体已更改        import ctypes        gdi32 = ctypes.windll.gdi32        gdi32.AddFontResourceW(font_path) # 确保字体在当前会话中可用        import win32gui        import win32con        win32gui.SendMessage(win32con.HWND_BROADCAST, win32con.WM_FONTCHANGE, 0, 0)        print(f"成功永久安装字体: {font_path}")        return True    except Exception as e:        print(f"永久安装字体时发生错误: {e}")        return False# 示例用法font_path = os.path.abspath("Copperplate.ttf") # 确保字体文件存在if install_font_permanently(font_path):    print("字体永久安装完成!")else:    print("字体永久安装失败!")

代码解释:

导入必要的库:

winreg:用于操作Windows注册表。os:用于处理文件路径。ctypes:用于调用Windows API。win32gui和win32con:用于发送Windows消息(需要安装pywin32库:pip install pywin32)。

获取字体文件名:

font_name = os.path.basename(font_path):从字体路径中提取文件名。

打开注册表键:

key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, “SOFTWAREMicrosoftWindows NTCurrentVersionFonts”, 0, winreg.KEY_ALL_ACCESS):打开注册表键,该键存储了已安装的字体信息。 注意:此操作需要管理员权限。

设置字体值:

winreg.SetValueEx(key, font_name[:-4], 0, winreg.REG_SZ, font_name):在注册表中创建一个新的值,键名为字体文件名(去掉.ttf后缀),键值为字体文件名。

关闭注册表键:

winreg.CloseKey(key):关闭注册表键。

通知系统字体已更改:

调用AddFontResourceW函数和发送WM_FONTCHANGE消息,确保字体在当前会话中可用。

注意事项:

管理员权限: 修改注册表需要管理员权限。请确保程序以管理员身份运行。可以使用pyuac库来请求管理员权限。注册表路径: 注册表路径”SOFTWAREMicrosoftWindows NTCurrentVersionFonts”是Windows字体信息的存储位置。文件名: 注册表键名是字体文件名(去掉.ttf后缀),键值是字体文件名。AddFontResourceW: 即使修改了注册表,也建议调用AddFontResourceW函数,以确保字体在当前会话中可用。错误处理: 确保程序能够处理注册表操作可能出现的错误,例如权限不足或注册表键不存在。

总结

直接复制字体文件到C:WindowsFonts文件夹不是安装字体的正确方法。应该使用AddFontResource API进行安装,如果需要永久安装,则需要修改注册表。 修改注册表需要管理员权限,并且需要小心操作,以避免对系统造成损害。在程序中集成字体安装功能时,请务必进行充分的测试,并提供清晰的错误提示信息。

以上就是正确安装字体到Windows系统:避免直接复制到Fonts文件夹的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1370082.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Django 中的中间件(Middleware)及其作用
上一篇 2025年12月14日 10:13:39
Windows下安装字体:正确方法与权限处理
下一篇 2025年12月14日 10:13:53

相关推荐

  • 电脑瘫痪了怎么用u盘重装系统?利用重装系统解救电脑系统瘫痪

    电脑瘫痪了怎么用u盘重装系统?利用重装系统解救电脑系统瘫痪电脑瘫痪了怎么用u盘重装系统?利用重装系统解救电脑系统瘫痪电脑瘫痪了怎么用u盘重装系统?利用重装系统解救电脑系统瘫痪电脑瘫痪了怎么用u盘重装系统?利用重装系统解救电脑系统瘫痪

    电脑系统崩溃是日常使用中经常遇到的问题,当系统无法正常启动时,我们可以通过u盘来重装操作系统。下面将详细介绍如何利用u盘修复并重装瘫痪的电脑系统。 重装前注意事项: 1、由于故障电脑无法开机,需准备一台正常的电脑用于制作启动U盘。 2、根据内存配置选择合适的系统版本:2GB以下内存建议安装32位(x…

    2026年9月25日 • 用户投稿
    000
  • sublime如何比较两个文件的差异 _sublime文件对比技巧

    sublime如何比较两个文件的差异 _sublime文件对比技巧sublime如何比较两个文件的差异 _sublime文件对比技巧sublime如何比较两个文件的差异 _sublime文件对比技巧sublime如何比较两个文件的差异 _sublime文件对比技巧

    Sublime Text可通过插件或外部工具实现文件对比。1. 使用内置Diff功能可高亮显示两文件差异行,适合小范围对比;2. 安装Diff插件后可在新标签页查看带+/-标记的差异结果;3. 配合Beyond Compare等第三方工具实现可视化并排对比,需通过External Tools类插件配…

    2026年9月25日 • 用户投稿
    000
  • 如何配置磁盘配额限制用户存储空间?

    如何配置磁盘配额限制用户存储空间?如何配置磁盘配额限制用户存储空间?如何配置磁盘配额限制用户存储空间?如何配置磁盘配额限制用户存储空间?

    配置磁盘配额可防止资源滥用、保障系统稳定,核心步骤包括:启用文件系统配额功能,编辑/etc/fstab添加usrquota和grpquota选项,重新挂载文件系统,生成配额文件aquota.user和aquota.group,使用edquota设置用户或组的磁盘空间与文件数软硬限制,并通过quota…

    2026年9月25日 • 用户投稿
    000
  • Win10系统鼠标光标乱跑怎么解决?

    Win10系统鼠标光标乱跑怎么解决?Win10系统鼠标光标乱跑怎么解决?Win10系统鼠标光标乱跑怎么解决?Win10系统鼠标光标乱跑怎么解决?

    鼠标作为电脑的重要外设之一,其操作的流畅性直接影响到我们的使用体验。大家在日常使用中,有没有遇到过光标不受控制、随意移动的问题呢?下面,我们来分享一下如何解决鼠标光标乱跑的问题。 如何解决鼠标光标乱跑问题? 点击右键打开“开始”菜单,然后选择其中的“计算机管理”。 进入计算机管理后,依次找到并展开“…

    2026年9月25日 • 用户投稿
    100
  • sublime未保存提示怎么关掉_关闭Sublime退出时未保存文件弹窗

    sublime未保存提示怎么关掉_关闭Sublime退出时未保存文件弹窗sublime未保存提示怎么关掉_关闭Sublime退出时未保存文件弹窗sublime未保存提示怎么关掉_关闭Sublime退出时未保存文件弹窗sublime未保存提示怎么关掉_关闭Sublime退出时未保存文件弹窗

    启用自动保存或热退出功能可避免Sublime Text退出时的未保存文件提示:1. 设置”save_on_focus_lost”: true实现切换时自动保存;2. 配置”hot_exit”: true使未保存文件在下次启动时恢复,从而跳过确认弹窗。 …

    2026年9月25日 • 用户投稿
    000
  • 鸣潮2.6版本更新公告-鸣潮2.6版本更新内容一览

    鸣潮2.6版本更新公告-鸣潮2.6版本更新内容一览鸣潮2.6版本更新公告-鸣潮2.6版本更新内容一览鸣潮2.6版本更新公告-鸣潮2.6版本更新内容一览鸣潮2.6版本更新公告-鸣潮2.6版本更新内容一览

    鸣潮将于8月28日迎来2.6版本的更新,届时将带来全新区域、角色及多项精彩内容。以下是本次2.6版本的详细更新汇总。 鸣潮2.6版本更新公告【维护时间 & 补偿说明】 ✦ 更新维护时间:2025年8月28日 04:00 ~ 11:00(UTC+8) ✦ 更新补偿内容:星声×300、结晶溶剂×…

    2026年9月25日 • 用户投稿
    600
  • win10网络通但不能上网的解决方法

    win10网络通但不能上网的解决方法win10网络通但不能上网的解决方法win10网络通但不能上网的解决方法win10网络通但不能上网的解决方法

    当电脑长时间使用时,难免会出现各种问题。近期有win10系统的用户向我们反映,自己的电脑出现了虽然网络连接正常但无法上网的情况,这让他们感到非常困扰。其实,类似的问题也困扰着不少其他用户,因此,本期文章将为大家介绍几种解决win10网络通但不能上网的方法。 以下是具体的处理步骤: 方法一: 1、按下…

    2026年9月25日 • 用户投稿
    400
  • windows8的“同步你的设置”功能怎么关闭_windows8关闭同步功能方法

    首先关闭Windows 8的同步功能,进入“更多电脑设置”中的“同步你的设置”,将“在此电脑上同步设置”关闭;随后可点击底部“删除”按钮清除云端历史数据,确保隐私安全。 如果您在使用Windows 8系统时希望停止个人设置的跨设备同步,可能是因为更换了主要使用设备或出于隐私保护考虑。关闭该功能可以防…

    2026年9月25日
    100
  • VSCode如何配置Dart开发环境 VSCode跨平台应用开发全攻略

    安装vscode并下载flutter sdk,将其bin目录添加到系统path环境变量;2. 在vscode中安装flutter扩展(自动包含dart扩展);3. 运行flutter doctor检查并修复环境配置问题,如android/ios工具链;4. 通过flutter create创建项目或…

    2026年9月25日
    100
  • win10去除快捷方式小箭头方法

    win10去除快捷方式小箭头方法win10去除快捷方式小箭头方法win10去除快捷方式小箭头方法win10去除快捷方式小箭头方法

    1. 如何移除win10快捷方式的小箭头 首先,在桌面上创建一个新的文本文档,接着将以下代码粘贴进去: reg add “HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerShell Icons” …

    2026年9月25日 • 用户投稿
    100
  • 高分辨率传感器在摄像头中的实际效果取决于哪些因素?

    高分辨率传感器在摄像头中的实际效果取决于哪些因素?高分辨率传感器在摄像头中的实际效果取决于哪些因素?高分辨率传感器在摄像头中的实际效果取决于哪些因素?高分辨率传感器在摄像头中的实际效果取决于哪些因素?

    高分辨率传感器需配合优质镜头、先进算法和充足光线才能发挥优势,提升细节表现,但受限于传感器尺寸、动态范围及存储处理需求,并非在所有场景下都必要。 因赛AIGC 因赛AIGC解决营销全链路应用场景 73 查看详情 高分辨率传感器在摄像头中带来的效果并非单纯的像素数量增加,而是与镜头素质、图像处理算法、…

    2026年9月25日 • 用户投稿
    100
  • 为什么你的电脑总是有莫名其妙的噪音?

    噪音多因硬件异常或老化,先判别类型及时处理;风扇积尘、轴承损坏致嗡嗡或吱吱声,清灰或更换可解决;机械硬盘咔哒响或是损坏前兆,须立即备份数据;电源或主板劣质元件引发滋滋声,需检查质量;机箱松动或共振产生震动噪音,紧固螺丝可改善。 电脑出现莫名其妙的噪音,通常不是无缘无故的。这些声音往往来自硬件运行中的…

    2026年9月25日
    300
  • sublime怎么连接sftp服务器_sublime SFTP服务器连接教程

    sublime怎么连接sftp服务器_sublime SFTP服务器连接教程sublime怎么连接sftp服务器_sublime SFTP服务器连接教程sublime怎么连接sftp服务器_sublime SFTP服务器连接教程sublime怎么连接sftp服务器_sublime SFTP服务器连接教程

    首先安装SFTP插件并配置sftp-config.json文件,设置host、user、remote_path等参数,保存后可通过右键菜单上传下载文件,支持自动同步与SSH密钥认证,注意避免密码泄露和编码问题。 使用Sublime Text连接SFTP服务器,可以通过安装SFTP插件实现文件的远程编…

    2026年9月25日 • 用户投稿
    100
  • Win10系统找不到启动设备是什么情况?

    Win10系统找不到启动设备是什么情况?Win10系统找不到启动设备是什么情况?Win10系统找不到启动设备是什么情况?Win10系统找不到启动设备是什么情况?

    在使用 win10 系统时,有时会遇到找不到启动设备的问题,这种提示往往令人困惑。那么,出现这种情况的原因是什么?又该如何解决呢?本文将为大家介绍一些有效的解决办法,希望能帮到大家。 Win10系统找不到启动设备的解决步骤: 1] 检查启动设备的连接 如果您的电脑是组装机类型,建议先关闭电源,打开机…

    2026年9月25日 • 用户投稿
    1300
  • 抖音巨量千川账户余额怎么提现?抖音巨量千川的钱怎么退

    抖音巨量千川账户余额怎么提现?抖音巨量千川的钱怎么退抖音巨量千川账户余额怎么提现?抖音巨量千川的钱怎么退抖音巨量千川账户余额怎么提现?抖音巨量千川的钱怎么退抖音巨量千川账户余额怎么提现?抖音巨量千川的钱怎么退

    在当今这个短视频盛行的时代,抖音无疑成为了许多人展示才华、分享生活的舞台。而抖音旗下的巨量千川广告平台,更是让许多商家和创作者通过广告实现了商业变现。在使用巨量千川的过程中,如何提取账户余额成为了一个让人头疼的问题。今天,就让我来为大家详细解析一下抖音巨量千川账户余额提现的全过程,让你轻松提取,安全…

    2026年9月25日 • 用户投稿
    100
  • 主板 M.2 接口的散热设计是否必要?

    主板 M.2 接口的散热设计是否必要?主板 M.2 接口的散热设计是否必要?主板 M.2 接口的散热设计是否必要?主板 M.2 接口的散热设计是否必要?

    对于高性能NVMe SSD,M.2接口散热设计十分必要。其能有效防止高负载下的热节流现象,保障持续性能输出并延长硬盘寿命。尤其在使用PCIe Gen4及以上规格SSD进行大文件传输、游戏或专业工作时,主板自带或额外加装的散热片可显著降低温度。中低端主板附带的简易散热片效果有限,仅适合轻度使用;而中高…

    2026年9月25日 • 用户投稿
    100
  • x浏览器兼容模式怎么设置_x浏览器IE兼容模式设置与使用

    x浏览器兼容模式怎么设置_x浏览器IE兼容模式设置与使用x浏览器兼容模式怎么设置_x浏览器IE兼容模式设置与使用x浏览器兼容模式怎么设置_x浏览器IE兼容模式设置与使用x浏览器兼容模式怎么设置_x浏览器IE兼容模式设置与使用

    开启x浏览器的IE兼容模式可解决网页显示异常问题。首先点击菜单进入设置,打开高级设置中的“IE兼容模式”开关;其次在“站点设置”的兼容性视图中添加特定网址,实现自动适配;最后对于临时需求,可通过地址栏的盾牌图标选择“使用IE内核重新加载”即时切换,确保老旧网站正常访问。 如果您在使用x浏览器时遇到某…

    2026年9月25日 • 用户投稿
    100
  • 微软确认Windows 11和10打印问题,HP Smart App引发疑虑

    微软确认Windows 11和10打印问题,HP Smart App引发疑虑微软确认Windows 11和10打印问题,HP Smart App引发疑虑微软确认Windows 11和10打印问题,HP Smart App引发疑虑微软确认Windows 11和10打印问题,HP Smart App引发疑虑

    N软网报道,微软近期确认,Windows 11与10用户正经历一系列令人头疼的打印故障。问题的核心在于HP Smart App,其相关文档已在官方Windows健康仪表板中更新,详细描述了这一异常状况。据反馈,HP Smart App可能会未经授权地侵入电脑,更改打印机名称及图标设置,导致诸如点击打…

    2026年9月25日 • 用户投稿
    200
  • Debian怎样实现快速回收

    Debian怎样实现快速回收Debian怎样实现快速回收Debian怎样实现快速回收Debian怎样实现快速回收

    优化Debian系统,释放磁盘空间,提升系统性能,可以通过以下方法快速实现: 一、清除无用软件包 使用 apt-get autoremove 命令卸载不再需要的软件包及其依赖项。使用 apt clean 和 apt autoclean 清理apt包管理器的缓存文件,释放更多空间。 二、删除旧内核版本…

    2026年9月25日 • 用户投稿
    000
  • mysql如何读取数据库数据

    mysql如何读取数据库数据mysql如何读取数据库数据mysql如何读取数据库数据mysql如何读取数据库数据

    MySQL 读取数据库数据有两种常用方法:SELECT 语句,用于从表中提取数据,语法为:SELECT [列名] FROM [表名] [条件] [分组] [条件] [排序] [限制]。fetchall() 方法,用于将所有结果行存储在一个元组列表中。 MySQL 读取数据库数据 MySQL 提供了多…

    2026年9月25日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信