概要
スタートメニュー・アプリケーションのデーター・ディスクトップ・マイドキュメント等のフォルダーは、 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
ソースファイルと実行ファイルのダウンロード