Как да инсталирате OpenType (тип на файла: otf) шрифт на приложение Започнете с C#

Трябва да инсталирам шрифт Myriad pro web.otf на клиентската машина, използвайки C#. Моля, предложете. Опитах се да инсталирам според кода, споменат в публикацията

   [DllImport("gdi32", EntryPoint = "AddFontResource")]
    public static extern int AddFontResourceA(string lpFileName);

    [System.Runtime.InteropServices.DllImport("shfolder.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]

    private static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder,
    IntPtr hToken, int dwFlags, StringBuilder lpszPath);

    private const int CSIDL_FONTS = 0x0014;
    private const int MAX_PATH = 260;

    // PInvoke to 'register' fonts and broadcast addition
    [System.Runtime.InteropServices.DllImport("gdi32.dll")]
    private static extern int AddFontResource(string lpszFilename);
    [System.Runtime.InteropServices.DllImport("gdi32.dll")]
    private static extern int CreateScalableFontResource(uint fdwHidden, string
    lpszFontRes, string lpszFontFile, string lpszCurrentPath);

    private static IntPtr HWND_BROADCAST = new IntPtr(0xffff);
    private const uint WM_FONTCHANGE = 0x001D;

    public Window1()
    {
        InitializeComponent();
        InstallFont();
    }

    internal static void InstallFont()
    {

        string fontsPath = GetFontsPath();

        string ttfFile = System.IO.Path.Combine(fontsPath, "MyriadPro-Semibold.otf");

        System.IO.File.Copy(@"C:\MyriadPro-Semibold.otf", ttfFile);

        int ret;

        if (System.IO.File.Exists(ttfFile))
        {
            //Add font resource
            ret = AddFontResource(ttfFile);
            //Add registry entry so the font is also available next session
            Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts",
                "MyriadPro-Semibold(TrueType)", "MyriadPro-Semibold.otf", RegistryValueKind.String);
            //Broadcast to let all top-level windows know about change
            ret = SendMessage(HWND_BROADCAST, WM_FONTCHANGE, new IntPtr(0), new IntPtr(0));
        }
    }


    private static string GetFontsPath()
    {
        StringBuilder sb = new StringBuilder(MAX_PATH);
        SHGetFolderPath(IntPtr.Zero, CSIDL_FONTS, IntPtr.Zero, 0, sb);
        return sb.ToString();
    }

    [System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
    private static extern int SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam,IntPtr lParam);
}

След изпълнение на кода мога да видя записа в системния регистър и също така се копира в системната папка Fonts, но не мога да видя шрифта от Microsoft Office Word.

пропускам ли нещо тук?


person Amit    schedule 20.08.2009    source източник


Отговори (1)


Къде е казва

Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts",
                "MyriadPro-Semibold(TrueType)", "MyriadPro-Semibold.otf", RegistryValueKind.String);

Не трябва ли да бъде

Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts",
                "MyriadPro-Semibold(TrueType)", "C:\windows\fonts\MyriadPro-Semibold.otf", RegistryValueKind.String);

където

C:\windows\fonts\

е папката с шрифтове на потребителя?

person Charlie Salts    schedule 20.08.2009