我正在尝试以编程方式在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,因此它正确地发送出去。
任何想法可能出错?
谢谢!
答案 0 :(得分:0)
字体文件通常包含多个字体。例如,foo.ttf可能包含字体Foo,Foo Bold,Foo Italic等。因此返回值2是正确的并且表示成功,因为fontFile.ttf
可能还包含字体的粗体或斜体版本。< / p>