概要

スタートメニュー・アプリケーションのデーター・ディスクトップ・マイドキュメント等のフォルダーは、 Windowsのバージョン、・ユーザー名等によって異なるので、これらのフォルダー名を取得するには、SHGetSpecialFolderPath APIを 用います。
このAPIのプロトタイプ宣言は以下の通りです。
BOOL SHGetSpecialFolderPath(HWND   hwndOwner,LPTSTR lpszPath,int csidl,BOOL   fCreate);
csidlに取得するフォルダー名の種類をshlObj.hで設定されているマクロで設定します。
例えば、スタートメニューのフォルダー名を取得するには以下の様に記述します。
#include <windows.h>
#include <shlobj.h>
#include <tchar.h>

TCHAR path[MAX_PATH];

int WINAPI _tWinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, TCHAR* CmdLine, int nCmdShow){
        if(SHGetSpecialFolderPath(NULL,path,CSIDL_STARTMENU,0)==TRUE)
                MessageBox(NULL,path,_TEXT("ログインユーザーのスタートメニューフォルダー"),MB_OK);
        return 0;
}
設定できるcsidlの一覧は、SHGetSpecialFolderPathに設定できるCSIDLを参照してください。

テスト環境

コンパイラ

Visual C++ 2008 Standard 32/64bit
Visual C++ 2013 Express 32/64bit

プロジェクトの作成

Win32プロジェクト Windowsアプリケーション

実行環境

Windows 8.1 Enterprise 64bit
Windows 7 EnterPrise Service Pack 1 64bit
Windows Vista Ultimate Service Pack 2 32bit
Windows XP Professional Service Pack 3 32bit

ソースファイルと実行ファイルのダウンロード

ダウンロード SHGetSpecialFolderPath.zip(35.8kByte)
ZIPファイルに含まれるファイル
SHGetSpecialFolderPath.cpp
SHGetSpecialFolderPath.exe