Windowsフォルダやテスクトップ等の特殊なフォルダは
色々と参照する事が多いですがOSやユーザーの設定によってパスは違ってきます。
WindowsフォルダならGetWindowsDirectory()、
SystemフォルダならGetSystemDirectory()、
テンポラリフォルダならGetTempPath()で取得する事ができますが
これら以外、デスクトップやスタートアップ等は専用のAPIがありません。
そこで使用するのがSHGetSpecialFolderLocation()というAPI(シェル)です。
このAPIを使うとデスクトップやスタートアップフォルダだけでなく
色々なフォルダのパスを取得する事が出来ます。
ただし、取得できる物はアイテムIDリストと言う形で取得されるのでそれをパスに変換する必要があります。
アイテムIDリストからパスに変換するにはSHGetPathFromIDList()で行います。
そして最後にアイテムIDリストを取得したら、それを開放しなければならないので
CoTaskMemFree()で開放してください。
例としてデスクトップのパスを取得するソースを示します。
char lpszPath[MAX_PATH] = "";
LPITEMIDLIST pidl;
if(::SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOPDIRECTORY, &pidl) == NOERROR)
{
::SHGetPathFromIDList(pidl, lpszPath);
::CoTaskMemFree(pidl);
}
AfxMessageBox(lpszPath);
|
SHGetSpecialFolderLocation()の2番目の引数に
どのフォルダのパスを取得するのか設定しますが
これは各フォルダにパラメータが割り当てられているのでそれを設定します。
以下の表が各フォルダのパラメータです。
パラメータ |
番号 |
フォルダ |
CSIDL_DESKTOP |
0x0000 |
デスクトップ |
CSIDL_INTERNET |
0x0001 |
インターネット |
CSIDL_PROGRAMS |
0x0002 |
プログラム |
CSIDL_CONTROLS |
0x0003 |
コントロールパネル |
CSIDL_PRINTERS |
0x0004 |
プリンタ |
CSIDL_PERSONAL |
0x0005 |
マイ ドキュメント |
CSIDL_FAVORITES |
0x0006 |
お気に入り |
CSIDL_STARTUP |
0x0007 |
スタートアップ |
CSIDL_RECENT |
0x0008 |
最近使ったファイル |
CSIDL_SENDTO |
0x0009 |
送る |
CSIDL_BITBUCKET |
0x000a |
ゴミ箱 |
CSIDL_STARTMENU |
0x000b |
スタートメニュー |
CSIDL_DESKTOPDIRECTORY |
0x0010 |
デスクトップ |
CSIDL_DRIVES |
0x0011 |
マイ コンピュータ |
CSIDL_NETWORK |
0x0012 |
マイ ネットワーク |
CSIDL_NETHOOD |
0x0013 |
NetHood |
CSIDL_FONTS |
0x0014 |
フォント |
CSIDL_TEMPLATES |
0x0015 |
テンプレート |
CSIDL_COMMON_STARTMENU |
0x0016 |
全ユーザーのスタートメニュー |
CSIDL_COMMON_PROGRAMS |
0x0017 |
全ユーザーのプログラム |
CSIDL_COMMON_STARTUP |
0x0018 |
全ユーザーのスタートアップ |
CSIDL_COMMON_DESKTOPDIRECTORY |
0x0019 |
全ユーザーのデスクトップ |
CSIDL_APPDATA |
0x001a |
Application Data |
CSIDL_PRINTHOOD |
0x001b |
PrintHood |
CSIDL_ALTSTARTUP |
0x001d |
ローカライズされないスタートアップ |
CSIDL_COMMON_ALTSTARTUP |
0x001e |
全ユーザーのローカライズされないスタートアップ |
CSIDL_COMMON_FAVORITES |
0x001f |
全ユーザーのお気に入り |
CSIDL_INTERNET_CACHE |
0x0020 |
IEキャッシュ保存先 |
CSIDL_COOKIES |
0x0021 |
クッキー |
CSIDL_HISTORY |
0x0022 |
履歴 |
|
黄色の項目は仮想的なフォルダで指定してもパスを取得する事は出来ません。
これはエクスプローラとかで表示されるマイ コンピュータとかの事です。
あと、環境によっては取得できない項目も有るので注意してください。
Windiws2000ではこれ以外にもプログラム標準インストール先(C:Program
Files)など取得できます。
適当にパラメータに番号を直接指定してやってどのフォルダが取得できるのか見てみるのも良いでしょう。
Windows95とかでプログラム標準インストール先を取得したい場合はレジストリから直接読みます。
基本的なフォルダの位置は以下のレジストリに書かれています。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell
Folders
プログラム標準インストール先はここには書いてなくてこちらのキーに書いてあります。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir
おまけでWindows98以降ならばSHGetSpecialFolderPath()で
もうちょっと簡単に特殊なフォルダのパスを取得する事ができます。
環境がWindows98以降と決まっているのならばこれを使うのも良いでしょう。
< 戻る << HOME |
©1999-2001 by Akky, All right reserved. |