記事カテゴリ

ユーザー機能


 2022年8月17日(水) 09:22 JST

[Delphi] OS上の特別なフォルダの場所を取得する(with Windows API)

  • 投稿者:
  • 表示回数
    7,423

以下のサンプルコードを参考にしてください。
このサンプルアプリケーションは、どのようにしてファイル、フォルダ、ドライブの情報を取得するかを提供しています。
このサンプルでは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\スタートメニュー

トラックバック

このエントリのトラックバックURL:
https://www.blackcat.xyz/trackback.php/ProgramingFAQ_del0015
  • [Delphi] OS上の特別なフォルダの場所を取得する(with Windows API)
  • 0 コメント
  • アカウントの登録

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