| Action: | Takes the CSIDL of a folder and returns the pathname | 
  
    |  |  | 
  
    | Syntax: | RetVal%
          
          
            = 
            SHGetFolderPath
            (
          
          hWndOwner%,
          csidl%,
          hToken%,
          dwFlags%,
          pszPath$) | 
  
    |  |  | 
  
    |  | 
            
              | hWndOwner% | Handle to an owner window. This parameter is typically set to
                0. If it is not 0, it must be a valid window handle. Normally
                this parameters applies only if a dial-up connection needs to be made to access the folder,
                so this prompt will appear in the given window. |  
              | csidl% | A CSIDL value that identifies the folder whose path is to be retrieved. 
                 You can force creation of a folder with SHGetFolderPath by combining the folder's CSIDL with
                CSIDL_FLAG_CREATE (Or): If the folder does not exist, then the SHGetFolderPath function creates it for you, fills the string buffer with the path, and returns S_OK. If you do not use the CSIDL_FLAG_CREATE flag, and the folder does not exist, then the SHGetFolder function returns S_FALSE and nothing is placed in your string buffer.
               |  
              | hToken% | An access token that can be used to represent a particular user. For systems earlier than Microsoft® Windows® 2000, it should be set to
                0. See the access token explanation in the Platform SDK for
                further information about obtaining tokens. Access token
                represent a special user. |  
              | dwFlags% | Flags to specify which path is to be returned. It is used for cases where the folder associated with a CSIDL may be moved or renamed by the
                user: SHGFP_TYPE_CURRENT = Return the folder's current pathSHGFP_TYPE_DEFAULT = Return the folder's default path
 |  
              | pszPath$ | Buffer of length of
                MAX_PATH (260 characters) to receive the path. Empty on error.
                Use pszPath$=Space$(260) to create the buffer and
                pszPath$=ZTrim(pszPath$) to obtain the value after the function
                returns successfully. |  | 
  
    |  |  | 
  
    | Explanation: | Because the location of special folders can change from system to
          system (it depends on the user's choice, and many systems do not use
          the default names!),
            Microsoft recommends that you use the SHGetFolderPath function to
            determine the path for a special folder. For example, you might want to
            determine the user's Application Data folder to store user-specific data
            for your application. You can determine this at run time using the
            SHGetFolderPath function. This function is a superset of SHGetSpecialFolderPath, included with earlier versions of the shell. 
            SHGetFolderPath returns one of these values: S_OK = Function successfully returned, buffer filledS_FALSE = The CSIDL is valid, but the folder does not exist
 E_INVALIDARG = The CSIDL is not valid
 | 
  
    |  |  | 
  
    | Example: | ' Include Library
$Library "ShFolder"
Local buf$ = Space$(260)
If SHGetFolderPath(0, CSIDL_PROGRAM_FILES, 0, _
  SHGFP_TYPE_CURRENT, buf$) = S_OK
  Message "Your Program Path: " + ZTrim(buf)
EndIf | 
  
    |  |  | 
  
    | Remark: | 
      
        SHGetFolderPath is new to the Windows 2000 API.If you call SHGetFolderPath from an application that can be installed on a
        previous version of Windows, then you will need to redistribute the file
        SHFolder.dll with your application.
 The SHFolder.dll file is freely redistributable and can be obtained from the
        latest Platform SDK, which is available from the following Web site: http://msdn.microsoft.com/developer/sdk/platform.asp
 | 
  
    |  |  | 
  
    | See Also: | App.scSpecialDir, App.scCommonPrograms, App.scCommonStartMenu, App.scPrograms, App.scStartMenu, SHGetPathFromIDList, SHGetSpecialFolderLocation |