Windows XP, Windows Vista, Windows 7 で動作するアプリを作成する上で、アプリ用のデータを保存するフォルダーとか、個人用のデータを保存するフォルダーなどを Windows 既定の場所を使用したいと思い、そのフォルダーの取得方法を調べました。
MSDNによると、CSIDL を使用する方法はWindows Vista 以降は、互換性のために残されていて、今後は、KNOWNFOLDERID を使用するようにとのことです。
CSIDL:https://msdn.microsoft.com/en-us/library/bb762494%28v=vs.85%29.aspx
KNOWNFOLDERID: https://msdn.microsoft.com/en-us/library/dd378457%28v=vs.85%29.aspx
CSIDL の取得
CSIDL の値をすべて配列にいれておいて、ループで実際のフォルダー名を列挙してます。
// SHFolders.cpp : Known Folders の列挙 // #include "stdafx.h" #include <shlobj.h> int _tmain(int argc, _TCHAR* argv[]) { TCHAR szPath[MAX_PATH]; typedef struct { int csidl; TCHAR szId[50]; } SHFOLDER; // CSIDL https://msdn.microsoft.com/en-us/library/bb762494%28v=vs.85%29.aspx SHFOLDER folders[] = { { CSIDL_ADMINTOOLS, _T("CSIDL_ADMINTOOLS") }, { CSIDL_ALTSTARTUP, _T("CSIDL_ALTSTARTUP") }, { CSIDL_APPDATA, _T("CSIDL_APPDATA") }, { CSIDL_BITBUCKET, _T("CSIDL_BITBUCKET") }, { CSIDL_CDBURN_AREA, _T("CSIDL_CDBURN_AREA") }, { CSIDL_COMMON_ADMINTOOLS, _T("CSIDL_COMMON_ADMINTOOLS") }, { CSIDL_COMMON_ALTSTARTUP, _T("CSIDL_COMMON_ALTSTARTUP") }, { CSIDL_COMMON_APPDATA, _T("CSIDL_COMMON_APPDATA") }, { CSIDL_COMMON_DESKTOPDIRECTORY, _T("CSIDL_COMMON_DESKTOPDIRECTORY") }, { CSIDL_COMMON_DOCUMENTS, _T("CSIDL_COMMON_DOCUMENTS") }, { CSIDL_COMMON_FAVORITES, _T("CSIDL_COMMON_FAVORITES") }, { CSIDL_COMMON_MUSIC, _T("CSIDL_COMMON_MUSIC") }, { CSIDL_COMMON_OEM_LINKS, _T("CSIDL_COMMON_OEM_LINKS") }, { CSIDL_COMMON_PICTURES, _T("CSIDL_COMMON_PICTURES") }, { CSIDL_COMMON_PROGRAMS, _T("CSIDL_COMMON_PROGRAMS") }, { CSIDL_COMMON_STARTMENU, _T("CSIDL_COMMON_STARTMENU") }, { CSIDL_COMMON_STARTUP, _T("CSIDL_COMMON_STARTUP") }, { CSIDL_COMMON_TEMPLATES, _T("CSIDL_COMMON_TEMPLATES") }, { CSIDL_COMMON_VIDEO, _T("CSIDL_COMMON_VIDEO") }, { CSIDL_COMPUTERSNEARME, _T("CSIDL_COMPUTERSNEARME") }, { CSIDL_CONNECTIONS, _T("CSIDL_CONNECTIONS") }, { CSIDL_CONTROLS, _T("CSIDL_CONTROLS") }, { CSIDL_COOKIES, _T("CSIDL_COOKIES") }, { CSIDL_DESKTOP, _T("CSIDL_DESKTOP") }, { CSIDL_DESKTOPDIRECTORY, _T("CSIDL_DESKTOPDIRECTORY") }, { CSIDL_DRIVES, _T("CSIDL_DRIVES") }, { CSIDL_FAVORITES, _T("CSIDL_FAVORITES") }, { CSIDL_FONTS, _T("CSIDL_FONTS") }, { CSIDL_HISTORY, _T("CSIDL_HISTORY") }, { CSIDL_INTERNET, _T("CSIDL_INTERNET") }, { CSIDL_INTERNET_CACHE, _T("CSIDL_INTERNET_CACHE") }, { CSIDL_LOCAL_APPDATA, _T("CSIDL_LOCAL_APPDATA") }, { CSIDL_MYDOCUMENTS, _T("CSIDL_MYDOCUMENTS") }, { CSIDL_MYMUSIC, _T("CSIDL_MYMUSIC") }, { CSIDL_MYPICTURES, _T("CSIDL_MYPICTURES") }, { CSIDL_MYVIDEO, _T("CSIDL_MYVIDEO") }, { CSIDL_NETHOOD, _T("CSIDL_NETHOOD") }, { CSIDL_NETWORK, _T("CSIDL_NETWORK") }, { CSIDL_PERSONAL, _T("CSIDL_PERSONAL") }, { CSIDL_PRINTERS, _T("CSIDL_PRINTERS") }, { CSIDL_PRINTHOOD, _T("CSIDL_PRINTHOOD") }, { CSIDL_PROFILE, _T("CSIDL_PROFILE") }, { CSIDL_PROGRAM_FILES, _T("CSIDL_PROGRAM_FILES") }, { CSIDL_PROGRAM_FILESX86, _T("CSIDL_PROGRAM_FILESX86") }, { CSIDL_PROGRAM_FILES_COMMON, _T("CSIDL_PROGRAM_FILES_COMMON") }, { CSIDL_PROGRAM_FILES_COMMONX86, _T("CSIDL_PROGRAM_FILES_COMMONX86") }, { CSIDL_PROGRAMS, _T("CSIDL_PROGRAMS") }, { CSIDL_RECENT, _T("CSIDL_RECENT") }, { CSIDL_RESOURCES, _T("CSIDL_RESOURCES") }, { CSIDL_RESOURCES_LOCALIZED, _T("CSIDL_RESOURCES_LOCALIZED") }, { CSIDL_SENDTO, _T("CSIDL_SENDTO") }, { CSIDL_STARTMENU, _T("CSIDL_STARTMENU") }, { CSIDL_STARTUP, _T("CSIDL_STARTUP") }, { CSIDL_SYSTEM, _T("CSIDL_SYSTEM") }, { CSIDL_SYSTEMX86, _T("CSIDL_SYSTEMX86") }, { CSIDL_TEMPLATES, _T("CSIDL_TEMPLATES") }, { CSIDL_WINDOWS, _T("CSIDL_WINDOWS") } }; // フォルダーの列挙 for (int i = 0; i < _countof(folders); i++) { if (SUCCEEDED(SHGetFolderPath(NULL, folders[i].csidl | CSIDL_FLAG_DONT_VERIFY, NULL, 0, szPath))) { _tprintf(_T("%s:%sn"), folders[i].szId, szPath); } } return 0; }
特別なフォルダの列挙
上記プログラムの実行結果は以下のとおりです。(フォルダ名の一部に個人名が使用されているところは編集しました。)
CSIDL_ADMINTOOLS:C:Documents and Settingsスタート メニュープログラム管理ツール CSIDL_ALTSTARTUP: CSIDL_APPDATA:C:Documents and SettingsApplication Data CSIDL_CDBURN_AREA:C:Documents and SettingsLocal SettingsApplication DataMicrosoftCD Burning CSIDL_COMMON_ADMINTOOLS:C:Documents and SettingsAll Usersスタート メニュープログラム管理ツール CSIDL_COMMON_ALTSTARTUP: CSIDL_COMMON_APPDATA:C:Documents and SettingsAll UsersApplication Data CSIDL_COMMON_DESKTOPDIRECTORY:C:Documents and SettingsAll Usersデスクトップ CSIDL_COMMON_DOCUMENTS:C:Documents and SettingsAll UsersDocuments CSIDL_COMMON_FAVORITES:C:Documents and SettingsAll UsersFavorites CSIDL_COMMON_MUSIC:C:Documents and SettingsAll UsersDocumentsMy Music CSIDL_COMMON_OEM_LINKS: CSIDL_COMMON_PICTURES:C:Documents and SettingsAll UsersDocumentsMy Pictures CSIDL_COMMON_PROGRAMS:C:Documents and SettingsAll Usersスタート メニュープログラム CSIDL_COMMON_STARTMENU:C:Documents and SettingsAll Usersスタート メニュー CSIDL_COMMON_STARTUP:C:Documents and SettingsAll Usersスタート メニュープログラムスタートアップ CSIDL_COMMON_TEMPLATES:C:Documents and SettingsAll UsersTemplates CSIDL_COMMON_VIDEO:C:Documents and SettingsAll UsersDocumentsMy Videos CSIDL_COOKIES:C:Documents and SettingsCookies CSIDL_DESKTOP:C:Documents and Settingsデスクトップ CSIDL_DESKTOPDIRECTORY:C:Documents and Settingsデスクトップ CSIDL_FAVORITES:C:Documents and SettingsFavorites CSIDL_FONTS:C:WINDOWSFonts CSIDL_HISTORY:C:Documents and SettingsLocal SettingsHistory CSIDL_INTERNET_CACHE:C:Documents and SettingsLocal SettingsTemporary Internet Files CSIDL_LOCAL_APPDATA:C:Documents and SettingsLocal SettingsApplication Data CSIDL_MYMUSIC:C:Documents and SettingsMy DocumentsMy Music CSIDL_MYPICTURES:C:Documents and SettingsMy DocumentsMy Pictures CSIDL_MYVIDEO:C:Documents and SettingsMy DocumentsMy Videos CSIDL_NETHOOD:C:Documents and SettingsNetHood CSIDL_PERSONAL:C:Documents and SettingsMy Documents CSIDL_PRINTHOOD:C:Documents and SettingsPrintHood CSIDL_PROFILE:C:Documents and Settings CSIDL_PROGRAM_FILES:C:Program Files CSIDL_PROGRAM_FILES_COMMON:C:Program FilesCommon Files CSIDL_PROGRAMS:C:Documents and Settingsスタート メニュープログラム CSIDL_RECENT:C:Documents and SettingsRecent CSIDL_RESOURCES:C:WINDOWSresources CSIDL_RESOURCES_LOCALIZED:C:WINDOWSresources411 CSIDL_SENDTO:C:Documents and SettingsSendTo CSIDL_STARTMENU:C:Documents and Settingsスタート メニュー CSIDL_STARTUP:C:Documents and Settingsスタート メニュープログラムスタートアップ CSIDL_SYSTEM:C:WINDOWSsystem32 CSIDL_SYSTEMX86:C:WINDOWSsystem32 CSIDL_TEMPLATES:C:Documents and SettingsTemplates CSIDL_WINDOWS:C:WINDOWS
以上です。