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