マイドキュメント等の特別なディレクトリ名の取得

(2001.04.03)
    static CString SHGetSpecialFolderPath(int nFolder, BOOL bAddBackslash)
    {
        TCHAR szPath[_MAX_PATH];
//        BOOL br = Emulate_SHGetSpecialFolderPath(NULL, szPath, nFolder, TRUE);                // SHLWAPI 4.71
        BOOL br = ::SHGetSpecialFolderPath(NULL, szPath, nFolder, TRUE);                // SHLWAPI 4.71
        if (br == FALSE)
        {
            return CString();
        }
 
        if (bAddBackslash)
        {
            ::PathAddBackslash(szPath);                                // SHLWAPI 4.71
        }
 
        return szPath;
    }
    // CSIDL_PROGRAM_FILES
    //  → Win98では取得できないため、レジストリから取得する専用バージョン
    static CString GetProgramFilesFolder()
    {
        CString strValue = /*CRegHelper::*/SHGetStringValue(
            HKEY_LOCAL_MACHINE,
            _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion"),
            _T("ProgramFilesDir"));
        if (strValue.IsEmpty())
        {
//            ATLASSERT(0);
            strValue = _T("C:\\Program Files");
        }
 
        strValue = CShlwapiHelper::PathAddBackslash(strValue);                        // SHLWAPI 4.71
 
        return strValue;
    }
    // CSIDL_PROGRAM_FILES_COMMON
    //  → Win98では取得できないため、レジストリから取得する専用バージョン
    static CString GetCommonFilesFolder()
    {
        CString strValue = /*CRegHelper::*/SHGetStringValue(
            HKEY_LOCAL_MACHINE,
            _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion"),
            _T("CommonFilesDir"));
        if (strValue.IsEmpty())
        {
//            ATLASSERT(0);
            strValue = _T("C:\\Program Files\\Common Files");
        }
 
        strValue = CShlwapiHelper::PathAddBackslash(strValue);                        // SHLWAPI 4.71
 
        return strValue;
    }
    static CString GetQuickLaunchFolder()
    {
        CString strAppData = SHGetSpecialFolderPath(CSIDL_APPDATA, TRUE);
        if (strAppData.IsEmpty())
        {
            return CString();
        }
 
        return strAppData + _T("Microsoft\\Internet Explorer\\Quick Launch\\");
    }
 
#if 0
    // 特別なフォルダの取得
    //  → SHLWAPI 4.71 互換
    static BOOL Emulate_SHGetSpecialFolderPath(HWND hwndOwner, LPTSTR lpszPath, int nFolder, BOOL fCreate)
    {
        ATLASSERT(lpszPath);
 
        HRESULT hr = S_OK;
 
        LPITEMIDLIST pidl = NULL;
        hr = ::SHGetSpecialFolderLocation(hwndOwner, nFolder, &pidl);
        if (FAILED(hr))
        {
            return FALSE;
        }
 
        BOOL br = ::SHGetPathFromIDList(pidl, lpszPath);
        if (br == FALSE)
        {
            return FALSE;
        }
 
        Emulate_ILFree(pidl);                                // shell32.dll version 5.0 or later
 
        if (fCreate != FALSE)
        {
/*
            int nResult = CFileHelper::Emulate_SHCreateDirectory(hwndOwner, lpszPath);    // shell32.dll version 5.0 or later
            if (nResult != ERROR_SUCCESS)
            {
                return FALSE;
            }
*/
        }
 
        return TRUE;
    }
#endif
 
--------- 以下は、ShlObj.hよりの抜粋 ----------
#define CSIDL_DESKTOP                   0x0000        // <desktop>
#define CSIDL_INTERNET                  0x0001        // Internet Explorer (icon on desktop)
#define CSIDL_PROGRAMS                  0x0002        // Start Menu\Programs
#define CSIDL_CONTROLS                  0x0003        // My Computer\Control Panel
#define CSIDL_PRINTERS                  0x0004        // My Computer\Printers
#define CSIDL_PERSONAL                  0x0005        // My Documents
#define CSIDL_FAVORITES                 0x0006        // <user name>\Favorites
#define CSIDL_STARTUP                   0x0007        // Start Menu\Programs\Startup
#define CSIDL_RECENT                    0x0008        // <user name>\Recent
#define CSIDL_SENDTO                    0x0009        // <user name>\SendTo
#define CSIDL_BITBUCKET                 0x000a        // <desktop>\Recycle Bin
#define CSIDL_STARTMENU                 0x000b        // <user name>\Start Menu
#define CSIDL_MYDOCUMENTS               0x000c        // logical "My Documents" desktop icon
#define CSIDL_MYMUSIC                   0x000d        // "My Music" folder
#define CSIDL_MYVIDEO                   0x000e        // "My Videos" folder
#define CSIDL_DESKTOPDIRECTORY          0x0010        // <user name>\Desktop
#define CSIDL_DRIVES                    0x0011        // My Computer
#define CSIDL_NETWORK                   0x0012        // Network Neighborhood
#define CSIDL_NETHOOD                   0x0013        // <user name>\nethood
#define CSIDL_FONTS                     0x0014        // windows\fonts
#define CSIDL_TEMPLATES                 0x0015
#define CSIDL_COMMON_STARTMENU          0x0016        // All Users\Start Menu
#define CSIDL_COMMON_PROGRAMS           0X0017        // All Users\Start Menu\Programs
#define CSIDL_COMMON_STARTUP            0x0018        // All Users\Startup
#define CSIDL_COMMON_DESKTOPDIRECTORY   0x0019        // All Users\Desktop
#define CSIDL_APPDATA                   0x001a        // <user name>\Application Data
#define CSIDL_PRINTHOOD                 0x001b        // <user name>\PrintHood
#define CSIDL_LOCAL_APPDATA             0x001c        // <user name>\Local Settings\Applicaiton Data (non roaming)
#define CSIDL_ALTSTARTUP                0x001d        // non localized startup
#define CSIDL_COMMON_ALTSTARTUP         0x001e        // non localized common startup
#define CSIDL_COMMON_FAVORITES          0x001f
#define CSIDL_INTERNET_CACHE            0x0020
#define CSIDL_COOKIES                   0x0021
#define CSIDL_HISTORY                   0x0022
#define CSIDL_COMMON_APPDATA            0x0023        // All Users\Application Data
#define CSIDL_WINDOWS                   0x0024        // GetWindowsDirectory()
#define CSIDL_SYSTEM                    0x0025        // GetSystemDirectory()
#define CSIDL_PROGRAM_FILES             0x0026        // C:\Program Files
#define CSIDL_MYPICTURES                0x0027        // C:\Program Files\My Pictures
#define CSIDL_PROFILE                   0x0028        // USERPROFILE
#define CSIDL_SYSTEMX86                 0x0029        // x86 system directory on RISC
#define CSIDL_PROGRAM_FILESX86          0x002a        // x86 C:\Program Files on RISC
#define CSIDL_PROGRAM_FILES_COMMON      0x002b        // C:\Program Files\Common
#define CSIDL_PROGRAM_FILES_COMMONX86   0x002c        // x86 Program Files\Common on RISC
#define CSIDL_COMMON_TEMPLATES          0x002d        // All Users\Templates
#define CSIDL_COMMON_DOCUMENTS          0x002e        // All Users\Documents
#define CSIDL_COMMON_ADMINTOOLS         0x002f        // All Users\Start Menu\Programs\Administrative Tools
#define CSIDL_ADMINTOOLS                0x0030        // <user name>\Start Menu\Programs\Administrative Tools
#define CSIDL_CONNECTIONS               0x0031        // Network and Dial-up Connections
#define CSIDL_COMMON_MUSIC              0x0035        // All Users\My Music
#define CSIDL_COMMON_PICTURES           0x0036        // All Users\My Pictures
#define CSIDL_COMMON_VIDEO              0x0037        // All Users\My Video
#define CSIDL_RESOURCES                 0x0038        // Resource Direcotry
#define CSIDL_RESOURCES_LOCALIZED       0x0039        // Localized Resource Direcotry
 
#define CSIDL_FLAG_CREATE               0x8000        // combine with CSIDL_value to force folder creation in SHGetFolderPath()
#define CSIDL_FLAG_DONT_VERIFY          0x4000        // combine with CSIDL_value to return an unverified folder path
#define CSIDL_FLAG_NO_ALIAS             0x1000        // combine with CSIDL_value to insure non-alias versions of the pidl
#define CSIDL_FLAG_PER_USER_INIT        0x0800        // combine with CSIDL_value to indicate per-user init (eg. upgrade)
#define CSIDL_FLAG_MASK                 0xFF00        // mask for all possible flag values
s
一覧に戻る
© 2003 WAC.com All Right Reserved.