2012-04-27 14 views
1

我試圖以編程方式在Win7 64位C#上安裝True-Type字體。C#AddFontResource不起作用 - 返回僅在1字體上調用時安裝的2種字體

由於某些原因,當我調用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

字體文件通常包含多個單一字體。例如,foo.ttf可能包含Foo,Foo Bold,Foo Italic等字體。所以2的返回值是正確的並表示成功,因爲fontFile.ttf可能還包含粗體或斜體版本的字體。