Frage

Ich frage mich, ob es irgendwelche einfache Möglichkeiten gibt eine Liste aller mit fester Breite (nicht-proportional) Schriftarten auf dem System eines Benutzers in C # installiert zu bekommen?

Ich verwende .net 3.5 so Zugriff auf den Namespace WPF System.Windows.Media haben und LINQ Schrift Informationen zu bekommen, aber ich bin nicht sicher, was ich suche.

Ich mag eine gefilterte Liste von Fixschriften bieten zu können und / oder Fixschriften aus einer größeren Liste von Schriftart auswählen (wie in dem VS-Optionen-Dialog zu sehen ist).

War es hilfreich?

Lösung

Haben Sie einen Blick auf:

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

eine der Strukturen verwenden dort, dann Schleife über Familien, eine Font Instanziieren und bekommt den LogFont Wert und Überprüfung lfPitchAndFamily.

Der folgende Code wird im laufenden Betrieb geschrieben und ungetestet, aber so etwas wie die folgenden funktionieren soll:

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......
        }
    }
}

Andere Tipps

Leider ToLogFont Funktion füllt nicht lfPitchAndFamily Feldwerte zu korrigieren. In meinem Fall ist es immer 0.

Eine Annäherung zu erkennen, welche Schriften festgelegt werden könnte, ist die folgende

    foreach ( FontFamily ff in FontFamily.Families ) {
            if ( ff.IsStyleAvailable( FontStyle.Regular ) ) {
                float diff;
                using ( Font font = new Font( ff, 16 ) ) {
                    diff = TextRenderer.MeasureText( "WWW", font ).Width - TextRenderer.MeasureText( "...", font ).Width;
                }
                if ( Math.Abs( diff ) < float.Epsilon * 2 ) {
                    Debug.WriteLine( ff.ToString() );
                }
            }

        }

Beachten Sie, dass sie mehrere Fehlalarme, zB Wingdings

sind

AFAIK Sie es nicht tun können, BCL-Bibliotheken nur verwenden. Sie haben WinAPI Interop verwenden.

Sie müssen zwei niedrigsten Bits von analysieren LOGFONT .lfPitchAndFamily Mitglied. Es gibt eine Konstante FIXED_PITCH (bedeutet, dass Schrift mit fester Breite), die für lfPitchAndFamily als Bitmaske verwendet werden kann.

Hier ist ein nützlicher Artikel:

Aufzählen Fonts

  

Aufzählen von Schriftarten kann ein wenig sein   verwirrend, und es sei denn, Sie wollen   aufzuzählen, alle Schriften auf Ihrem System,   kann ein wenig schwieriger sein als   MSDN schlägt. In diesem Artikel werden   genau erklären, die Schritte, die Sie brauchen, um   nutzen jede Schrift mit fester Breite zu finden auf   Ihr System, und aufzählen auch jeden   mögliche Größe für jeden einzelnen   Schriftart.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top