カレントディレクトリは、関数 GetCurrentDirectory() によって取得することができる。
Windowsディレクトリは、関数 GetWindowsDirectory() によって取得することができる。
WindowsのSystemディレクトリは、関数 GetSystemDirectory() によって取得することができる。
上記以外の特殊ディレクトリを取得する方法として、関数 SHGetSpecialFolderPath() がある。
以下に、第3引数に指定した値と取得されたパスとの対応例を示す。
また、関数 SHGetSpecialFolderPath() が使用できない環境への対処法も示す。
第3引数 | パス |
CSIDL_DESKTOP | A:\WINDOWS\デスクトップ |
CSIDL_DESKTOPDIRECTORY | A:\WINDOWS\デスクトップ |
CSIDL_STARTMENU | A:\WINDOWS\スタート メニュー |
CSIDL_PROGRAMS | A:\WINDOWS\スタート メニュー\プログラム |
CSIDL_STARTUP | A:\WINDOWS\スタート メニュー\プログラム\スタートアップ |
CSIDL_ALTSTARTUP | A:\WINDOWS\スタート メニュー\プログラム\スタートアップ |
CSIDL_PERSONAL | A:\My Documents |
CSIDL_FAVORITES | A:\WINDOWS\Favorites |
CSIDL_RECENT | A:\WINDOWS\Recent |
CSIDL_SENDTO | A:\WINDOWS\SendTo |
CSIDL_NETHOOD | A:\WINDOWS\NetHood |
CSIDL_FONTS | A:\WINDOWS\FONTS |
CSIDL_TEMPLATES | A:\WINDOWS\ShellNew |
CSIDL_APPDATA | A:\WINDOWS\Application Data |
CSIDL_PRINTHOOD | A:\WINDOWS\PrintHood |
CSIDL_INTERNET_CACHE | A:\WINDOWS\Temporary Internet Files |
CSIDL_COOKIES | A:\WINDOWS\Cookies |
CSIDL_HISTORY | A:\WINDOWS\History |
CSIDL_COMMON_DESKTOPDIRECTORY | A:\WINDOWS\All Users\デスクトップ |
CSIDL_COMMON_STARTMENU | A:\WINDOWS\All Users\スタート メニュー |
CSIDL_COMMON_PROGRAMS | A:\WINDOWS\All Users\スタート メニュー\プログラム |
CSIDL_COMMON_STARTUP | A:\WINDOWS\All Users\スタート メニュー\プログラム\スタートアップ |
CSIDL_COMMON_ALTSTARTUP | A:\WINDOWS\スタート メニュー\プログラム\スタートアップ |
CSIDL_COMMON_FAVORITES | A:\WINDOWS\All Users\Favorites |
//*********************************************************
// 関数 SHGetSpecialFolderPath() が使用できない環境で特殊フォルダのパスを取得する。
// 引数は SHGetSpecialFolderPath() と同じ。
//*********************************************************
BOOL GetSpecialFolderPath( HWND hWnd, int nFolder, char *Path )
{
IMalloc *pMalloc;
ITEMIDLIST *pidl;
if ( NOERROR == SHGetMalloc( &pMalloc ) )
{
if ( NOERROR == SHGetSpecialFolderLocation( hWnd, nFolder, &pidl ) )
{
if ( SHGetPathFromIDList( pidl, Path ) )
{
pMalloc->Free( pidl );
pMalloc->Release();
return TRUE;
}
pMalloc->Free( pidl );
}
pMalloc->Release();
}
return FALSE;
}//GetSpecialFolder
関連
・実行ファイルのパス名を取得する
・特殊フォルダ(ごみ箱、タスクスケジューラなど)を開く
・関数 CoCreateInstance() を使用したコードでコンパイルエラーがでる
・インターフェイス(IMalloc, IShellLink など)を使用したコードでコンパイルエラーがでる
|