すらいむがあらわれた

こまんど >  たたかう  にげる

Windowsにインストールされているフォントの英語名を取得

たとえば外国製の製品のなかでフォントを使うときに
MS 明朝」ではなくて「MS Mincho」といったフォントの英語名を使いたい場合があります。
外国製の製品では日本語のことは考慮されてないことが多いので、余計なエラーを避けるためになるべく英語名にしておきたい。


フォントの英語名がとれる便利なツールがあるのではと周りのデザインやフォントに詳しそうな人に聞いてみたけれどないとのことだったので(わたし調べ)、
ぐぐったところ、こちらにVB.NETのコード例があったのでC#に直して使いました。
日本語フォント名から英語フォント名を取得する
http://backyard.hatenablog.com/entry/20130723/1374553873
DOBON.NETプログラミング道/インストールされているフォントを取得する
http://dobon.net/vb/dotnet/system/getinstalledfonts.html


なお、元のコードはちゃんとメソッドにしてありますが、Program.csにべたっと張り付けて実行できるほうがお手軽だったので、私のはメソッド化してません :P
実行するとシステムにインストールされているフォントの英語名をコンソール上に出力します。


細かいハマりポイントとしてプロジェクトの「対象のフレームワーク」が「.NET Framework 4 Client Profile」だとSystem.Drawingを参照できないので実行できません。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;

namespace GetFontName
{
    class Program
    {
        static void Main(string[] args)
        {

            //InstalledFontCollectionオブジェクトの取得
            System.Drawing.Text.InstalledFontCollection ifc =
                new System.Drawing.Text.InstalledFontCollection();

            //インストールされているすべてのフォントファミリを取得
            FontFamily[] ffs = ifc.Families;

            // 英語のCulture ID取得
            int cultureId = System.Globalization.CultureInfo.GetCultureInfo("en-us").LCID;

            foreach (FontFamily ff in ffs)
            {
                // 英語のフォント名取得、表示
                Console.WriteLine(ff.GetName(cultureId));
            }

            Console.WriteLine("push key someting...");
            Console.Read();

        }
    }
}