<p>以下は、個人のスタートアップフォルダを取得する例です。</p>
<pre class="brush: delphi;" title="GetStartupFolderPath">
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;
</pre>
<p>Delphi5ではもっと簡単にするためにShlObjに、｢SHGetSpecialFolderPath｣関数が用意されています。この関数の使い方はサンプルを参照してください。下に例を示します。</p>
<pre class="brush: delphi;" title="SHGetSpecialFolderPath">
  SHGetSpecialFolderPath(
    0,
    szPath,
    CSIDL_DESKTOP,
    false
  );
</pre>
<p>このほかに、システムフォルダを取得する定数ほかに以下に示すようなものがあります。詳しくはShlObjを参照していただきたいのですが、仮想フォルダのため実際のパスを取得できないケースも多々あります。</p>
<table width="80%">
    <tbody>
        <tr>
            <td>値</td>
            <td>説明</td>
        </tr>
        <tr>
            <td>CSIDL_DESKTOP</td>
            <td>デスクトップ</td>
        </tr>
        <tr>
            <td>CSIDL_PROGRAMS</td>
            <td>x:&#092;Document and Settings&#092;[User Name]&#092;スタート メニュー&#092;プログラム</td>
        </tr>
        <tr>
            <td>CSIDL_PERSONAL</td>
            <td>My Documents</td>
        </tr>
        <tr>
            <td>CSIDL_FAVORITES</td>
            <td>お気に入り</td>
        </tr>
        <tr>
            <td>CSIDL_STARTUP</td>
            <td>スタートアップ（英語）</td>
        </tr>
        <tr>
            <td>CSIDL_RECENT</td>
            <td>最近使ったファイル</td>
        </tr>
        <tr>
            <td>CSIDL_SENDTO</td>
            <td>送る</td>
        </tr>
        <tr>
            <td>CSIDL_STARTMENU</td>
            <td>スタートメニュー</td>
        </tr>
        <tr>
            <td>CSIDL_DESKTOPDIRECTORY</td>
            <td>デスクトップ</td>
        </tr>
        <tr>
            <td>CSIDL_NETHOOD</td>
            <td>NetHood</td>
        </tr>
        <tr>
            <td>CSIDL_FONTS</td>
            <td>フォントフォルダ</td>
        </tr>
        <tr>
            <td>CSIDL_TEMPLATES</td>
            <td>テンプレート</td>
        </tr>
        <tr>
            <td>CSIDL_COMMON_STARTMENU</td>
            <td>All Users&#092;スタートメニュー</td>
        </tr>
    </tbody>
</table>