Tips of VC++ > シェル > システムフォルダへのパスを取得する
前へ戻る次へ進む


このドキュメントにはサンプルプログラムが含まれています。
ワークスペース
ソースファイル(テキスト)


システムフォルダへのパスを取得する

Windows XPになると、システムフォルダの取得がより面倒になりました。 Meまでなら"c:\windows\デスクトップ", "c:\my documents"などでよかったのですが、 ユーザー情報が絡んでくると、やはりAPIを利用したほうが無難です。 環境依存は常にいいものではありませんから。

Shell関数のSHGetSpecialFolderPathを使えばたちどころに解決します。 MSDNを読めば分かるのですが、無精な人を想定して解説 (^^
ShGetFolderPathという関数もありますが、 フォルダ名を取得するだけなら、SHGetSpecialFolderPathで十分です。

BOOL SHGetSpecialFolderPath(
    HWND hwndOwner,
    LPTSTR lpszPath,
    int nFolder,
    BOOL fCreate
);

必要なヘッダーは<shlobj.h>です。忘れずにインクルードしてください。 パラメータはだいたい見れば分かりますね。 ウィンドウハンドルと、文字列の受け皿、フォルダの識別定数、フラグです。 それぞれ解説します。

●ウィンドウハンドル
MSDNにThis parameter is typically set to NULL. と書いてあるので、 NULLにすればいいでしょう。通常は使わないようです。

●文字列
おなじみですね。長さはMAX_PATHでいいでしょう。 MAX_PATHが最小限と書いてありますので、心配ならMAX_PATH*2とかで(適当)

●フラグ
指定フォルダが存在しなかったとき、そのフォルダを作成するかどうかです。 0にすると作成しない、0以外で作成する、となっています。 TRUE,FALSEを使っても良いでしょう。

●フォルダの識別定数
これが一番面倒そうです。CSIDL_なんちゃら という定数が 大量にあるのです。サンプルプログラムで主な定数と そのフォルダのパスを表示するものを作ったので、使ってください。 キャプチャ画面を載せてみます。

30 Mar., 2003