Win7 64 ビットの C# に True-Type フォントをプログラムでインストールしようとしています。
何らかの理由で、AddFontResource を呼び出すと、フォントが正しくインストールされず、フォントを 1 つしか追加していないにもかかわらず、"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 を返すため、正しく送信されています。
何がうまくいかないのでしょうか?
ありがとう!