MFC-SHGetSpecialFolderPath获取指定的系统路径

发布时间 2023-04-21 21:41:02作者: 天子骄龙

 

    CString str;
    TCHAR path[MAX_PATH];

    BOOL b = SHGetSpecialFolderPath(NULL, path, CSIDL_PROGRAM_FILES_COMMONX86, 0);//获取指定的系统路径
    /*
    参数1:HWND hwndOwner   窗口所有者的句柄。可以NULL
    参数2:LPTSTR lpszPath  返回路径的缓冲区,该缓冲区的大小至少为MAX_PATH
    参数3:int nFolder      系统路径的CSIDL标识
            CSIDL (constant special item ID list)是系统定义的特殊条目的ID列表
            在vista之后被KNOWNFOLDERID所替代(但为保持兼容性,仍支持CSIDL)
            CSIDL_DESKTOP=0x0000         桌面                                  C:\Users\Administrator\Desktop
            CSIDL_INTERNET=0x0001        Internet Explorer (icon on desktop)
            CSIDL_PROGRAMS=0x0002        Start Menu\Programs                   C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
            CSIDL_CONTROLS=0x0003        My Computer\Control Panel
            CSIDL_PRINTERS=0x0004        My Computer\Printers
            CSIDL_PERSONAL=0x0005        My Documents我的文档                  C:\Users\Administrator\Documents
            CSIDL_FAVORITES=0x0006       <user name>\Favorites收藏夹           C:\Users\Administrator\Favorites
            CSIDL_STARTUP=0x0007         Start Menu\Programs\Startup启动       C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
            CSIDL_RECENT=0x0008          <user name>\Recent最近使用的项目      C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Recent
            CSIDL_SENDTO=0x0009          <user name>\SendTo                    C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\SendTo
            CSIDL_BITBUCKET=0x000a       <desktop>\Recycle Bin
            CSIDL_STARTMENU=0x000b       <user name>\Start Menu                C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu
            CSIDL_MYDOCUMENTS              我的文档                            C:\Users\Administrator\Documents
            CSIDL_MYMUSIC=0x000d         "My Music" folder音乐                 C:\Users\Administrator\Music
            CSIDL_MYVIDEO=0x000e         "My Videos" folder视频                C:\Users\Administrator\Videos
            CSIDL_DESKTOPDIRECTORY=0x0010   桌面                               C:\Users\Administrator\Desktop
            CSIDL_DRIVES=0x0011           My Computer
            CSIDL_NETWORK=0x0012          Network Neighborhood (My Network Places)
            CSIDL_NETHOOD=0x0013          <user name>\nethood                  C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Network Shortcuts
            CSIDL_FONTS=0x0014            windows\fonts  字体                  C:\Windows\Fonts
            CSIDL_TEMPLATES=0x0015                                             C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Templates
            CSIDL_COMMON_STARTMENU=0x0016     All Users\Start Menu             C:\ProgramData\Microsoft\Windows\Start Menu
            CSIDL_COMMON_PROGRAMS=0X0017      All Users\Start Menu\Programs    C:\ProgramData\Microsoft\Windows\Start Menu\Programs
            CSIDL_COMMON_STARTUP=0x0018       All Users\Startup                C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
            CSIDL_COMMON_DESKTOPDIRECTORY=0x0019       All Users\Desktop       C:\Users\Public\Desktop
            CSIDL_APPDATA=0x001a          <user name>\Application Data         C:\Users\Administrator\AppData\Roaming
            CSIDL_PRINTHOOD=0x001b        <user name>\PrintHood
            CSIDL_LOCAL_APPDATA
            CSIDL_LOCAL_APPDATA=0x001c     <user name>\Local Settings\Applicaiton Data (non roaming)
            CSIDL_LOCAL_APPDATA
            CSIDL_ALTSTARTUP=0x001d        non localized startup
            CSIDL_COMMON_ALTSTARTUP=0x001e      non localized common startup
            CSIDL_COMMON_FAVORITES=0x001f
            _SHFOLDER_H_
            CSIDL_INTERNET_CACHE=0x0020
            CSIDL_COOKIES=0x0021
            CSIDL_HISTORY=0x0022
            CSIDL_COMMON_APPDATA=0x0023      All Users\Application Data
            CSIDL_WINDOWS=0x0024             GetWindowsDirectory()
            CSIDL_SYSTEM=0x0025              GetSystemDirectory()
            CSIDL_PROGRAM_FILES=0x0026                                        C:\Program Files
            CSIDL_MYPICTURES=0x0027                                           C:\Program Files\My Pictures
            _SHFOLDER_H_
            CSIDL_PROFILE=0x0028        USERPROFILE
            CSIDL_SYSTEMX86=0x0029      x86 system directory on RISC
            CSIDL_PROGRAM_FILESX86=0x002a        x86                         C:\Program Files on RISC
            CSIDL_PROGRAM_FILES_COMMON=0x002b                                C:\Program Files\Common
            CSIDL_PROGRAM_FILES_COMMONX86=0x002c        x86                  C:\Program Files (x86)\Common Files
            CSIDL_COMMON_TEMPLATES=0x002d        All Users\Templates
            CSIDL_COMMON_DOCUMENTS=0x002e        All Users\Documents
            CSIDL_COMMON_ADMINTOOLS=0x002f       All Users\Start Menu\Programs\Administrative Tools
            CSIDL_ADMINTOOLS=0x0030              <user name>\Start Menu\Programs\Administrative Tools
            CSIDL_CONNECTIONS=0x0031             Network and Dial-up Connections
            CSIDL_COMMON_MUSIC=0x0035            All Users\My Music
            CSIDL_COMMON_PICTURES=0x0036         All Users\My Pictures
            CSIDL_COMMON_VIDEO              0x0037        // All Users\My Video
            CSIDL_RESOURCES                 0x0038        // Resource Direcotry
            CSIDL_RESOURCES_LOCALIZED       0x0039        // Localized Resource Direcotry
            CSIDL_COMMON_OEM_LINKS          0x003a        // Links to All Users OEM specific apps
            CSIDL_CDBURN_AREA               0x003b        // USERPROFILE\Local Settings\Application Data\Microsoft\CD Burning
            CSIDL_COMPUTERSNEARME           0x003d        // Computers Near Me (computered from Workgroup membership)
            CSIDL_FLAG_CREATE               0x8000        // combine with CSIDL_ value to force folder creation in SHGetFolderPath()
            CSIDL_FLAG_DONT_VERIFY          0x4000        // combine with CSIDL_ value to return an unverified folder path
            CSIDL_FLAG_DONT_UNEXPAND        0x2000        // combine with CSIDL_ value to avoid unexpanding environment variables
            CSIDL_FLAG_NO_ALIAS             0x1000        // combine with CSIDL_ value to insure non-alias versions of the pidl
            CSIDL_FLAG_PER_USER_INIT        0x0800        // combine with CSIDL_ value to indicate per-user init (eg. upgrade)
            CSIDL_FLAG_MASK                 0xFF00        // mask for all possible flag values


    参数4:BOOL fCreate  指示文件夹不存在时是否创建。为false则不创建,否则创建

    返回值:函数执行成功则返回true,否则返回false
    */

    str = path;


    ::OutputDebugString(str);