以下のサンプルコードを参考にしてください。
このサンプルアプリケーションは、どのようにしてファイル、フォルダ、ドライブの情報を取得するかを提供しています。
このサンプルではWinAPI(「SHGetSpecialFolderLocation」と「SHGetPathFromIDList」)を使用しているため、 uses に定義が書いてある「ShlObj」と、Olecheckのために「ComObj」を追加する必要があります。
サンプルプログラムのダウンロードは→[Delphi FAQ用サンプル] OS上の特別なフォルダの場所を取得する(with Windows API)
以下は、個人のスタートアップフォルダを取得する例です。
function GetStartupFolderPath: String;
var
IIDList: PItemIDList;
buffer: array [0..MAX_PATH] of char;
begin
IIDList := nil;
OleCheck(SHGetSpecialFolderLocation(Application.Handle,
CSIDL_STARTUP, IIDList));
if not SHGetPathFromIDList(IIDList, buffer) then
begin
raise Exception.Create('仮想フォルダのため取得できません');
end;
Result := StrPas(Buffer);
end;
Delphi5ではもっと簡単にするためにShlObjに、「SHGetSpecialFolderPath」関数が用意されています。この関数の使い方はサンプルを参照してください。下に例を示します。
SHGetSpecialFolderPath( 0, szPath, CSIDL_DESKTOP, false );
このほかに、システムフォルダを取得する定数ほかに以下に示すようなものがあります。詳しくはShlObjを参照していただきたいのですが、仮想フォルダのため実際のパスを取得できないケースも多々あります。
| 値 | 説明 |
| CSIDL_DESKTOP | デスクトップ |
| CSIDL_PROGRAMS | x:\Document and Settings\[User Name]\スタート メニュー\プログラム |
| CSIDL_PERSONAL | My Documents |
| CSIDL_FAVORITES | お気に入り |
| CSIDL_STARTUP | スタートアップ(英語) |
| CSIDL_RECENT | 最近使ったファイル |
| CSIDL_SENDTO | 送る |
| CSIDL_STARTMENU | スタートメニュー |
| CSIDL_DESKTOPDIRECTORY | デスクトップ |
| CSIDL_NETHOOD | NetHood |
| CSIDL_FONTS | フォントフォルダ |
| CSIDL_TEMPLATES | テンプレート |
| CSIDL_COMMON_STARTMENU | All Users\スタートメニュー |

以下のコメントは、その投稿者が所有するものでサイト管理者はコメントに関する責任を負いません。