我正在尝试使用下面的代码使用 C# 代码安装字体。
调用InstallFont不会抛出任何异常并返回1。我认为这表明它已经安装了字体。但是,该字体既没有出现在 Windows Fonts 文件夹中的已安装字体列表中,也没有出现在检查 InstalledFontCollection 时,也没有显示在我的软件中。我已经尝试安装后重新启动计算机,但仍然无法使用。
如果我通过双击 Windows 资源管理器并单击“安装”来手动安装该文件,则字体安装不会出现问题。
我在 Windows 7 64 位操作系统上使用 C#、Visual Studio 2010、Microsoft .NET Framework 4.0。
任何帮助将不胜感激。
非常感谢,
保罗
清单文件包括:
requestedExecutionLevel level="requireAdministrator" uiAccess="false"
申请代码:
[DllImport("user32.dll")]
public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam);
[DllImport("gdi32.dll", EntryPoint = "AddFontResourceW", SetLastError = true)]
public static extern int AddFontResource([In][MarshalAs(UnmanagedType.LPWStr)] string lpFileName);
public static int InstallFont()
{
InstalledFontCollection ifc = new InstalledFontCollection();
if (ifc.Families.Any(item => item.Name == "Arial Narrow"))
return 100; // Font already installed
string filename = @"C:\Users\username\Downloads\ARIALN.TTF";
const int WM_FONTCHANGE = 0x001D;
const int HWND_BROADCAST = 0xffff;
int added = AddFontResource(filename);
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
return added;
}
请务必查看有关 AddFontResource() 的 MSDN 库文章:
此函数仅为当前会话安装字体。当系统重新启动时,该字体将不存在。要在重新启动系统后也安装字体,该字体必须列在注册表中。
InstalledFontCollection 类仅枚举实际安装的字体并忽略临时字体。写入注册表项并将文件复制到 c:\windows\fonts 很大程度上是安装程序的职责。除了通过控制面板小程序之外,微软没有记录如何做到这一点。如果你想尝试一下,注册表项是 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)