Search code examples
c#wpffontsmonospace

How do I get all installed fixed-width fonts?


I'm wondering if there are any simple ways to get a list of all fixed-width (monospaced) fonts installed on a user's system in C#?

I'm using .net 3.5 so have access to the WPF System.Windows.Media namespace and LINQ to get font information, but I'm not sure what I'm looking for.

I want to be able to provide a filtered list of monospaced fonts and/or pick out monospaced fonts from a larger list of fonts (as seen in the VS options dialog).


Solution

  • Have a look at:

    http://www.pinvoke.net/default.aspx/Structures/LOGFONT.html

    Use one of the structures in there, then loop over families, instantiating a Font, and getting the LogFont value and checking lfPitchAndFamily.

    The following code is written on the fly and untested, but something like the following should work:

    foreach (FontFamily ff in System.Drawing.FontFamily.Families)
    {
        if (ff.IsStyleAvailable(FontStyle.Regular))
        {
            Font font = new Font(ff, 10);
            LOGFONT lf = new LOGFONT();
            font.ToLogFont(lf);
            if (lf.lfPitchAndFamily ^ 1)
            {
                do stuff here......
            }
        }
    }