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

using System.Runtime.InteropServices;


// for Vista
extern static int SHGetKnownFolderPath(ref Guid rfid, int dwFlags, int
  hToken, out IntPtr path);
extern static void CoTaskMemFree(IntPtr pv);
// for Windows XP
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
        // 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