- スタートアップフォルダのパスの取得 -




ゴミ箱や、マイドキュメント等特殊フォルダのパス取得方法
今回は実用的なスタートアップフォルダのパスの取得方法を紹介します



□ MSDNよりSHGetSpecialFolderLocationの引用 □

 WINSHELLAPI HRESULT WINAPI SHGetSpecialFolderLocation(
  HWND hwndOwner,
  int nFolder,
  LPITEMIDLIST *ppidl
 );

  ・hwndOwnerは親ウインドウハンドル
  ・nFolderはどのパスを取得するかのパラメータ設定
  ・ppidlは取得フルパスのアイテムIDリストでポインタを渡します
  ・戻り値は新しいタブの 0 から始まるインデックス


TnFolderに設定するフラグは以下になります
とても説明しきれないので詳細はMSDN等で調べてください。
名前からある程度見当はつくと思いますが…
--------・--------・--------・--------
CSIDL_ALTSTARTUP
CSIDL_APPDATA
CSIDL_BITBUCKET
CSIDL_COMMON_ALTSTARTUP
CSIDL_COMMON_DESKTOPDIRECTORY
CSIDL_COMMON_FAVORITES
CSIDL_COMMON_PROGRAMS
CSIDL_COMMON_STARTMENU
CSIDL_COMMON_STARTUP
CSIDL_CONTROLS
CSIDL_COOKIES
CSIDL_DESKTOP
CSIDL_DESKTOPDIRECTORY
CSIDL_DRIVES
CSIDL_FAVORITES
CSIDL_FONTS
CSIDL_HISTORY
CSIDL_INTERNET
CSIDL_INTERNET_CACHE
CSIDL_NETHOOD
CSIDL_NETWORK
CSIDL_PERSONAL
CSIDL_PRINTERS
CSIDL_PRINTHOOD
CSIDL_PROGRAMS
CSIDL_RECENT
CSIDL_SENDTO
CSIDL_STARTMENU
CSIDL_STARTUP
CSIDL_TEMPLATES
--------・--------・--------・--------

スタートアップフォルダのパス取得にはCSIDL_PROGRAMSを設定します

3番目の引数については説明する自信が無いのでMSDN等で調べて見てください


ITEMIDLISTからファイルやディレクトリのパスを取得にはSHGetPathFromIDListを使います。


□ MSDNよりSHGetPathFromIDListの引用 □

 WINSHELLAPI BOOL WINAPI SHGetPathFromIDList(
  LPCITEMIDLIST pidl,
  LPSTR pszPath
 );

  ・pidl はファイルやディレクトリの情報が格納されたITEMIDLIST構造体へのポインタを指定
  ・pszPathは取得したパスを格納するための文字列へのポインタを指定
  ・戻り値は成功した場合はTRUE、失敗した場合はFALSE






≪ MFC ダイアログベースでの作成サンプル ≫



 ■ダイアログにタブコントロールを追加

      

      サンプルではボタンIDをIDC_GETPASとします




 ■ClassWizardよりタブコントロールのメンバー変数を作成

      オブジェクトID → IDC_GETPAS
      メッセージ → BN_CLICKED





 ■作成したボタンクリックイベント関数にソース追加
void CTest11Dlg::OnGetpas()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください

//取得パス格納用char型配列の作成
char FilePas[MAX_PATH];

//ITEMIDLIST構造体 pidlを作成
LPITEMIDLIST pidl;

//取得パスをITEMIDLIST構造体 pidlに格納
SHGetSpecialFolderLocation(GetSafeHwnd(),CSIDL_STARTUP, &pidl);

//ITEMIDLIST構造体pidlからパスをchar型配列に格納
SHGetPathFromIDList(pidl, FilePas);

//取得したパスをメッセージボックスに表示
MessageBox(filePath,"取得パス表示");
}





 ■以上、コンパイルすれば完成

      

      ボタンクリックで取得パスをメッセージボックスに表示