デスクトップやマイドキュメントなどのフォルダは
ログインユーザーなどによって異なりますが、
シェル関数と呼ばれるもので特殊フォルダのパスを取得することが可能です。
実際に利用する際はuses節にWinapi.ShlObj(XE以前はShlObj)を追加し、
SHGetSpecialFolderPath関数を呼び出すだけです。
(※末尾の「\」は付きませんので、必要に応じてIncludeTrailingPathDelimiterを併用)
// デスクトップのフォルダパスを返す
procedure TForm1.FormCreate(Sender: TObject);
var
buff: array [0..MAX_PATH] of Char;
begin
SHGetSpecialFolderPath(0, buff, CSIDL_DESKTOP, False);
Edit1.Text := buff;
end;
3番目のパラメータで取得したいフォルダを指定します。
指定できる代表的なものに次のようなフォルダのパスがあります。
- CSIDL_DESKTOP:デスクトップ
- CSIDL_STARTMENU:スタートメニュー
- CSIDL_PROGRAMS:スタートメニューのプログラムのフォルダ
- CSIDL_PERSONAL:マイドキュメント
- CSIDL_STARTUP:スタートアップ
- CSIDL_RECENT:最近使ったファイル
詳細はMicrosoftのHPや、Winapi.ShlObj.pasファイルのconst値をご参照下さい。
(値の中には、新しいWindows 10や11では無効になっているものも存在します。)
(ミガロ.情報マガジン「MIGARO News!!」Vol.110 2010年1月号より)