Feedback

C# - Fonts Verzeichnis finden unter Vista oder Windows XP

Veröffentlicht von am 10.04.2008
(1 Bewertungen)
How to get the Fonts directory


someone told me I could use GetEnvironmentVariable like this:
string fontDir = Environment.GetEnvironmentVariable("windir") + @"\Fonts";

the two drawbacks are that it relies on the "windir" to be set (which is usualy the case on a windows system) and it assumes
that the Fonts directory is called "Fonds" and at the default location in the "windir" directory

I think it is better to let the system figure out where the Fonts directory is located ...


GFU-Schulungen  [Anzeige]

XML und .NET Überblick

Um auf dem neuesten Wissensstand zu sein, sollten Sie unser aktuelles ASP .NET Komplett Seminar belegen.
Nach dem Seminar kennen Sie die wichtigsten Strömungen in der Software-Technologie

Visual Studio Team Foundation Server 2017/2015 (TFS) für Entwickler - Kompakt

Nach Teilnahme an dieser Schulung kennen Sie alle wesentlichen Funktionen des TFS für Entwickler. Sie setzen Software-Entwicklung mit dem Visual Studio Team Foundation Server erfolgreich um.

using System.Runtime.InteropServices;

...

// for Vista
[DllImport("shell32.dll")]
extern static int SHGetKnownFolderPath(ref Guid rfid, int dwFlags, int
  hToken, out IntPtr path);
[DllImport("ole32.dll")]
extern static void CoTaskMemFree(IntPtr pv);
// for Windows XP
[DllImport("shell32.dll")]
static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken,
  uint dwFlags, [Out] StringBuilder pszPath);

...

// the routine:
private string GetFontPath()
{

    string result = "";
    if ((System.Environment.OSVersion.Version.Major > 5))
    {
        // You are running Vista

        // In Windows SDK for Vista, you will find all known folders
        // are defined in KnownFolders.h:
        Guid FOLDERID_Fonts = new Guid("{FD228CB7-AE11-4AE3-864C-16F3910AB8FE}"); ;

        IntPtr intPtr;
        SHGetKnownFolderPath(ref FOLDERID_Fonts, 0, 0, out intPtr);

        // convert the IntPtr to a string via Marshal.PtrToStringUni
        result = Marshal.PtrToStringUni(intPtr);
        // free the resource via CoTaskMemFree
        CoTaskMemFree(intPtr);
    }
    else
    {
        // Windows XP

        StringBuilder sb = new StringBuilder();
        SHGetFolderPath(IntPtr.Zero, 0x0014, IntPtr.Zero, 0x0000, sb);//CSIDL_FONTS = 0x0014
        string fontDir = sb.ToString();
        result = fontDir;
    }

    return result;
}

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!

Ähnliche Snippets