[PR]

特殊フォルダのパスを取得する

戻る

 カレントディレクトリは、関数 GetCurrentDirectory() によって取得することができる。
 Windowsディレクトリは、関数 GetWindowsDirectory() によって取得することができる。
 WindowsのSystemディレクトリは、関数 GetSystemDirectory() によって取得することができる。

 上記以外の特殊ディレクトリを取得する方法として、関数 SHGetSpecialFolderPath() がある。
 以下に、第3引数に指定した値と取得されたパスとの対応例を示す。
 また、関数 SHGetSpecialFolderPath() が使用できない環境への対処法も示す。

第3引数パス
CSIDL_DESKTOPA:\WINDOWS\デスクトップ
CSIDL_DESKTOPDIRECTORYA:\WINDOWS\デスクトップ
CSIDL_STARTMENUA:\WINDOWS\スタート メニュー
CSIDL_PROGRAMSA:\WINDOWS\スタート メニュー\プログラム
CSIDL_STARTUPA:\WINDOWS\スタート メニュー\プログラム\スタートアップ
CSIDL_ALTSTARTUPA:\WINDOWS\スタート メニュー\プログラム\スタートアップ
CSIDL_PERSONALA:\My Documents
CSIDL_FAVORITESA:\WINDOWS\Favorites
CSIDL_RECENTA:\WINDOWS\Recent
CSIDL_SENDTOA:\WINDOWS\SendTo
CSIDL_NETHOODA:\WINDOWS\NetHood
CSIDL_FONTSA:\WINDOWS\FONTS
CSIDL_TEMPLATESA:\WINDOWS\ShellNew
CSIDL_APPDATAA:\WINDOWS\Application Data
CSIDL_PRINTHOODA:\WINDOWS\PrintHood
CSIDL_INTERNET_CACHEA:\WINDOWS\Temporary Internet Files
CSIDL_COOKIESA:\WINDOWS\Cookies
CSIDL_HISTORYA:\WINDOWS\History
CSIDL_COMMON_DESKTOPDIRECTORYA:\WINDOWS\All Users\デスクトップ
CSIDL_COMMON_STARTMENUA:\WINDOWS\All Users\スタート メニュー
CSIDL_COMMON_PROGRAMSA:\WINDOWS\All Users\スタート メニュー\プログラム
CSIDL_COMMON_STARTUPA:\WINDOWS\All Users\スタート メニュー\プログラム\スタートアップ
CSIDL_COMMON_ALTSTARTUPA:\WINDOWS\スタート メニュー\プログラム\スタートアップ
CSIDL_COMMON_FAVORITESA:\WINDOWS\All Users\Favorites


関数 SHGetSpecialFolderPath() が使用できない環境への対処例

//*********************************************************
// 関数 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 など)を使用したコードでコンパイルエラーがでる



Google
ご意見・ご感想をお聞かせ下さい。匿名で送信できます。

 * 返信が必要な場合には postmaster@katsura-kotonoha.sakura.ne.jp へ直接メールしてください。

水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp

あなたの作った歌をソフトウェアが人間の声で歌う! これぞ近未来のソフトウェア!
これを流行の一言ですませてはいけない! 技術的にもコンセプト的にも凄い!