SHGetSpecialFolderPath (shell32)
Last changed: -82.143.213.85

.
Summary

C# Signature:

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

VB Signature:

<DllImport("coredll.dll")> Shared Function SHGetSpecialFolderPath(ByVal hwndOwner As IntPtr,
   <Out()> ByVal lpszPath As IntPtr, ByVal nFolder As Integer, ByVal fCreate As Boolean) As Boolean
End Function

User-Defined Types:

None.

Notes:

lpszPath must be at least MAX_PATH (260) characters in size.

Tips & Tricks:

Please add some!

Sample Code:

   int CSIDL_MYMUSIC = 0x000d;
   IntPtr path = Marshal.AllocHGlobal(300);
   SHGetSpecialFolderPath(parent.Handle, path, CSIDL_MYMUSIC, 0);

   string myMusicDir = Marshal.PtrToStringUni(path);

Alternative Managed API:

Environment.GetFolderPath(Environment.SpecialFolder.xxx) probably calls this internally - it does the same thing.

However not all of the enums are available (e.g. CSIDL_COMMON_DOCUMENTS missing on .NET 1.1) therefore this is needed sometimes.

Documentation