[DllImport("Shell32.dll")]
static extern int SHGetSpecialFolderPath(IntPtr hwndOwner, IntPtr lpszPath, int nFolder, int fCreate);
<DllImport("Shell32.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
None.
lpszPath must be at least MAX_PATH (260) characters in size.
Please add some!
int CSIDL_MYMUSIC = 0x000d;
IntPtr path = Marshal.AllocHGlobal(260);
SHGetSpecialFolderPath(parent.Handle, path, CSIDL_MYMUSIC, 0);
string myMusicDir = Marshal.PtrToStringUni(path);
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.