获取系统特殊文件夹路径

代码文件: unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;
type
 TForm1 = class(TForm)
  Memo1: TMemo;
  procedure FormCreate(Sender: TObject);
 end;
var
 Form1: TForm1;
implementation
{$R *.dfm}
uses ShlObj; {SHGetSpecialFolderLocation、SHGetPathFromIDList 函数来自这个单元}
{获取常用路径(的)函数}
function GetPath(FID: Integer): string;
var
 pidl: PItemIDList;
 path: array[0..MAX_PATH] of Char;
begin
 SHGetSpecialFolderLocation(0, FID, pidl);
 SHGetPathFromIDList(pidl, path);
 Result := path;
end;
{测试时, 我把 SHGetSpecialFolderLocation 函数需要(的)参数定义成了一个常数数组}
const
 arr: array[0..57] of Integer = (
  CSIDL_DESKTOP         , { = $0000 }
  CSIDL_INTERNET        , { = $0001 }
  CSIDL_PROGRAMS        , { = $0002 }
  CSIDL_CONTROLS        , { = $0003 }
  CSIDL_PRINTERS        , { = $0004 }
  CSIDL_PERSONAL        , { = $0005 }
  CSIDL_FAVORITES        , { = $0006 }
  CSIDL_STARTUP         , { = $0007 }
  CSIDL_RECENT         , { = $0008 }
  CSIDL_SENDTO         , { = $0009 }
  CSIDL_BITBUCKET        , { = $000a }
  CSIDL_STARTMENU        , { = $000b }
  CSIDL_MYDOCUMENTS       , { = $000c }
  CSIDL_MYMUSIC         , { = $000d }
  CSIDL_MYVIDEO         , { = $000e }
  CSIDL_DESKTOPDIRECTORY    , { = $0010 }
  CSIDL_DRIVES         , { = $0011 }
  CSIDL_NETWORK         , { = $0012 }
  CSIDL_NETHOOD         , { = $0013 }
  CSIDL_FONTS          , { = $0014 }
  CSIDL_TEMPLATES        , { = $0015 }
  CSIDL_COMMON_STARTMENU    , { = $0016 }
  CSIDL_COMMON_PROGRAMS     , { = $0017 }
  CSIDL_COMMON_STARTUP     , { = $0018 }
  CSIDL_COMMON_DESKTOPDIRECTORY , { = $0019 }
  CSIDL_APPDATA         , { = $001a }
  CSIDL_PRINTHOOD        , { = $001b }
  CSIDL_LOCAL_APPDATA      , { = $001c }
  CSIDL_ALTSTARTUP       , { = $001d }
  CSIDL_COMMON_ALTSTARTUP    , { = $001e }
  CSIDL_COMMON_FAVORITES    , { = $001f }
  CSIDL_INTERNET_CACHE     , { = $0020 }
  CSIDL_COOKIES         , { = $0021 }
  CSIDL_HISTORY         , { = $0022 }
  CSIDL_COMMON_APPDATA     , { = $0023 }
  CSIDL_WINDOWS         , { = $0024 }
  CSIDL_SYSTEM         , { = $0025 }
  CSIDL_PROGRAM_FILES      , { = $0026 }
  CSIDL_MYPICTURES       , { = $0027 }
  CSIDL_PROFILE         , { = $0028 }
  CSIDL_SYSTEMX86        , { = $0029 }
  CSIDL_PROGRAM_FILESX86    , { = $002a }
  CSIDL_PROGRAM_FILES_COMMON  , { = $002b }
  CSIDL_PROGRAM_FILES_COMMONX86 , { = $002c }
  CSIDL_COMMON_TEMPLATES    , { = $002d }
  CSIDL_COMMON_DOCUMENTS    , { = $002e }
  CSIDL_COMMON_ADMINTOOLS    , { = $002f }
  CSIDL_ADMINTOOLS       , { = $0030 }
  CSIDL_CONNECTIONS       , { = $0031 }
  CSIDL_COMMON_MUSIC      , { = $0035 }
  CSIDL_COMMON_PICTURES     , { = $0036 }
  CSIDL_COMMON_VIDEO      , { = $0037 }
  CSIDL_RESOURCES        , { = $0038 }
  CSIDL_RESOURCES_LOCALIZED   , { = $0039 }
  CSIDL_COMMON_OEM_LINKS    , { = $003a }
  CSIDL_CDBURN_AREA       , { = $003b }
  CSIDL_COMPUTERSNEARME     , { = $003d }
  CSIDL_PROFILES         { = $003e }
 );
{测试}
procedure TForm1.FormCreate(Sender: TObject);
var
 i: Integer;
 s: string;
begin
 Memo1.Clear;
 for i := 0 to Length(Arr) - 1 do
 begin
  s := GetPath(Arr[i]);
  if s<>'' then Memo1.Lines.Add(Format('%d:'#9'%s', [Arr[i], s]));
 end;
end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值