 |
- スタートアップフォルダのパスの取得 -
ゴミ箱や、マイドキュメント等特殊フォルダのパス取得方法
今回は実用的なスタートアップフォルダのパスの取得方法を紹介します
□ 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,"取得パス表示");
}
|
■以上、コンパイルすれば完成

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