2008年7月15日

特殊フォルダのパス名の取得

Windowsの特殊フォルダのCSIDLからパス名を取得するにはSHGetFolderPathを使用します。
uses
  Windows, SHFolder;

function GetSpecialFolder(csidl: Integer): String;
var
  Buffer: array [0..MAX_PATH] of Char;
begin

  Result := '';
  if Succeeded(SHGetFolderPath(0,csidl,0,0,Buffer)) = True then
  begin
    Result := Buffer;
  end;

end;
ただし全てのCSIDL_...が有効なパスを返すとは限らない(SHGetFolderPathでパスが取得できないCSIDLもあり、また環境にも依存する)ので注意が必要。

2008/07/17追記: SHGetFolderPathの第4パラメータは正確には
SHGFP_TYPE_CURRENT(0): 実際のパス
SHGFP_TYPE_DEFAULT(1): デフォルトのパス
のどちらかを指定します。SHGFP_TYPE_CURRENTを指定するとユーザによって特殊フォルダのパス名が変更されていた場合でもこれを反映したものを返します。SHGFP_TYPE_DEFAULTを指定するとシステム本来の(デフォルトの)パスを返します。

0 件のコメント: