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:
const int CSIDL_PROGRAMS = 2; // \Windows\Start Menu\Programs
StringBuilder path = new StringBuilder(260);
SHGetSpecialFolderPath(IntPtr.Zero, path, CSIDL_PROGRAMS, false);
// path.ToString() should now hold the 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.
An IntPtr is a pointer to a memory location (unmanaged) that adapts to the platform it is running on (64-bit, etc.) UNLIKE a standard int/Integer. You should always use this type for unmanaged calls that require it, even though an int will appear to work on your development machine.
1/13/2008 4:00:13 AM - Damon Carr-72.43.165.29
An IntPtr is a pointer to a memory location (unmanaged) that adapts to the platform it is running on (64-bit, etc.) UNLIKE a standard int/Integer. You should always use this type for unmanaged calls that require it, even though an int will appear to work on your development machine.