我正在尝试使用下面的代码使用 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;
}