1

我正在尝试在 Win7 64 位上以编程方式在 C# 中安装 True-Type 字体。

出于某种原因,当我调用 AddFontResource 时,字体没有正确安装,即使我只添加一种字体,我也会得到“2”的返回。

如果我只是双击它并使用常规的 Windows 字体安装界面安装它,字体就会正确安装,所以我知道它是正确的字体。如果我在无效路径上调用 AddFontResource,那么对于没有安装字体,我会得到正确的返回 0,所以它似乎在做“某事”并找到字体文件,但无论它在做什么,它都不起作用。

这是我正在使用的代码:

    [DllImport("user32.dll")]
    public static extern int SendMessage(int hWnd,  uint Msg, int wParam,  int lParam);
    [DllImport("gdi32")]
    public static extern int AddFontResource(string lpFileName); 
    public static void InstallFonts()
    {
        const int WM_FONTCHANGE = 0x001D;
        const int HWND_BROADCAST = 0xffff;
        int Ret = AddFontResource(@"C:\FontFile.ttf");
        int Res = SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
    }

字体“FontFile.ttf”显然存在。正如我所提到的,AddFontResource 返回 2,这是没有意义的,而 SendMessage 返回 1,因此它可以正确发送。

有什么想法可能会出错吗?

谢谢!

4

1 回答 1

0

字体文件通常包含多个字体。例如,foo.ttf 可能包含字体 Foo、Foo Bold、Foo Italic 等。因此返回值 2 是正确的并且表示成功,因为fontFile.ttf可能还包含字体的粗体或斜体版本。

于 2014-05-28T22:42:53.670 回答