Windowsのさまざまなフォルダ名を取得する

WIndowsがインストールされているフォルダや、インターネットキャッシュフォルダ等がどこにあるのかを取得します。
この例では全てグローバル変数に格納していますが、必要に応じて変更してください。

//
//    Windowsの様々なフォルダ名を得る
//    ログオンアカウント環境毎の取得ができます
//    Windows95/98/NT4.0
//
var
    WinDir,              // Windowsがインストールされているフォルダ名
    AppDataDir,          // アプリケーションデータフォルダ
    IECacheDir,          // インターネットキャッシュフォルダ
    CookiesDir,          // Cookiesデータフォルダ
    DeskTopDir,          // デスクトップフォルダ
    FavoritesDir,        // インターネットお気に入りのフォルダ
    FontsDir,            // フォントフォルダ
    HistoryDir,          // 履歴フォルダ
    NetHoodDir,          // 何でしょうね?わかりまん
    PersonalDir,         // My Documentsフォルダ
    ProgramsDir,         // スタートメニュー・プログラムのフォルダ
    RecentDir,           // 最近使ったファイルのフォルダ
    SendToDir,           // 送るのショートカットフォルダ
    StartMenuDir,        // スタートメニューのフォルダ
    StartUpDir,          // スタートメニュー・プログラム・スタートアップのフォルダ
    TemplatesDir,        // 新規作成のテンプレートフォルダ
    TempDir: string;     // 作業フォルダ

procedure GetWinWorkDir;
var
    wdir: PChar;
    temp: array[0..260] of char;
    reg: TRegistry;
begin
    // Windowsフォルダ
    wdir := @temp;
    // Win32API
    if GetWindowsDirectory(wdir, 260) = 0 then
        WinDir := 'c:\WIndows'    // 取得できなかった場合
    else
        WinDir := wdir;
    // Windows作業フォルダ
    wdir := @temp;
    // Win32API
    if GetTempPath(260, wdir) = 0 then
        TempDir := WinDir + '\Temp'    // 取得できなかった場合
    else
        TempDir := wdir;

    // ログオンアカウント毎に環境が異なる場合でも、レジストリを参照することで
    // その環境でのフォルダを取得できます
    reg := TRegistry.Create;
    reg.RootKey := HKEY_CURRENT_USER;
    if reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders', False) then
    begin
        try
            AppDataDir    := reg.ReadString('AppData');
            IECacheDir    := reg.ReadString('Cache');
            CookiesDir    := reg.ReadString('Cookies');
            DeskTopDir    := reg.ReadString('Desktop');
            FavoritesDir  := reg.ReadString('Favorites');
            FontsDir      := reg.ReadString('Fonts');
            HistoryDir    := reg.ReadString('History');
            NetHoodDir    := reg.ReadString('NetHood');
            PersonalDir   := reg.ReadString('Personal');
            ProgramsDir   := reg.ReadString('Programs');
            RecentDir     := reg.ReadString('Recent');
            SendToDir     := reg.ReadString('SendTo');
            StartMenuDir  := reg.ReadString('Start Menu');
            StartUpDir    := reg.ReadString('Startup');
            TemplatesDir  := reg.ReadString('Templates');
        finally
            reg.CloseKey;
        end;
    end;
    reg.Free;

    // 取得できなかった場合の処理(必要な場合)
    if IECacheDir = '' then
        IECacheDir  := WinDir + '\Temporary Internet Files';
    // 以下必要に応じて追加する
end;