C#AddFontResource不起作用 - 仅在1种字体上调用时返回安装的2种字体

时间:2012-04-27 18:17:42

标签: c# fonts pinvoke

我正在尝试以编程方式在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,因此它正确地发送出去。

任何想法可能出错?

谢谢!

1 个答案:

答案 0 :(得分:0)

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