shgetspecialfolderpath (coredll)
Last changed: -199.255.40.36

.
Summary
This function retrieves the path of a special folder, identified by its CSIDL. (From MSDN)

C# Signature:

[DllImport("coredll.dll")]
static extern int SHGetSpecialFolderPath(IntPtr hwndOwner, StringBuilder lpszPath, int nFolder, int fCreate);

User-Defined Types:

None.

Notes:

None.

Tips & Tricks:

None.

Sample Code:

    //Diferent folders to use.
    const int CSIDL_DESKTOP = 0x0000; //Not supported on Smartphone.
    const int CSIDL_FAVORITES = 0x0006; //The file system directory that serves as a common repository for the user's favorite items.
    const int CSIDL_FONTS = 0x0014; //The virtual folder that contains fonts.
    const int CSIDL_PERSONAL = 0x0005; //The file system directory that serves as a common repository for documents.
    const int CSIDL_PROGRAM_FILES = 0x0026; //The program files folder.
    const int CSIDL_PROGRAMS = 0x0002; //The file system directory that contains the user's program groups, which are also file system directories.
    const int CSIDL_STARTUP = 0x0007; //The file system directory that corresponds to the user's Startup program group. The system starts these programs when a device is powered on.
    const int CSIDL_WINDOWS = 0x0024; //The Windows folder.

    private string getPath(int folderCSIDL)
    {
        StringBuilder resultPath = new StringBuilder(255);

        SHGetSpecialFolderPath((IntPtr)0, resultPath, folderCSIDL, 0);
        return resultPath.ToString();
    }

Alternative Managed API:

The Environment.GetFolderPath Method in .NET Compact Framework 2.0, but it's incomplete as for instance the Program Files special folder is not available.

Documentation