获取WINDOWS特殊文件夹


const
// registry entries for special paths are kept in :
  REGSTR_PATH_SPECIAL_FOLDERS   = REGSTR_PATH_EXPLORER + 'Shell Folders';
  {$EXTERNALSYM REGSTR_PATH_SPECIAL_FOLDERS}

  CSIDL_DESKTOP                 = $0000;          // <desktop>
  {$EXTERNALSYM CSIDL_DESKTOP}
  CSIDL_INTERNET                = $0001;          // Internet Explorer (icon on desktop)
  {$EXTERNALSYM CSIDL_INTERNET}
  CSIDL_PROGRAMS                = $0002;          // Start MenuPrograms
  {$EXTERNALSYM CSIDL_PROGRAMS}
  CSIDL_CONTROLS                = $0003;          // My ComputerControl Panel
  {$EXTERNALSYM CSIDL_CONTROLS}
  CSIDL_PRINTERS                = $0004;          // My ComputerPrinters
  {$EXTERNALSYM CSIDL_PRINTERS}
  CSIDL_PERSONAL                = $0005;          // My Documents
  {$EXTERNALSYM CSIDL_PERSONAL}
  CSIDL_FAVORITES               = $0006;          // <user name>Favorites
  {$EXTERNALSYM CSIDL_FAVORITES}
  CSIDL_STARTUP                 = $0007;          // Start MenuProgramsStartup
  {$EXTERNALSYM CSIDL_STARTUP}
  CSIDL_RECENT                  = $0008;          // <user name>Recent
  {$EXTERNALSYM CSIDL_RECENT}
  CSIDL_SENDTO                  = $0009;          // <user name>SendTo
  {$EXTERNALSYM CSIDL_SENDTO}
  CSIDL_BITBUCKET               = $000a;          // <desktop>Recycle Bin
  {$EXTERNALSYM CSIDL_BITBUCKET}
  CSIDL_STARTMENU               = $000b;          // <user name>Start Menu
  {$EXTERNALSYM CSIDL_STARTMENU}
  CSIDL_MYDOCUMENTS             = CSIDL_PERSONAL; // Personal was just a silly name for My Documents
  {$EXTERNALSYM CSIDL_MYDOCUMENTS}
  CSIDL_MYMUSIC                 = $000d;          // "My Music" folder
  {$EXTERNALSYM CSIDL_MYMUSIC}
  CSIDL_MYVIDEO                 = $000e;          // "My Videos" folder
  {$EXTERNALSYM CSIDL_MYVIDEO}
  CSIDL_DESKTOPDIRECTORY        = $0010;          // <user name>Desktop
  {$EXTERNALSYM CSIDL_DESKTOPDIRECTORY}
  CSIDL_DRIVES                  = $0011;          // My Computer
  {$EXTERNALSYM CSIDL_DRIVES}
  CSIDL_NETWORK                 = $0012;          // Network Neighborhood (My Network Places)
  {$EXTERNALSYM CSIDL_NETWORK}
  CSIDL_NETHOOD                 = $0013;          // <user name> ethood
  {$EXTERNALSYM CSIDL_NETHOOD}
  CSIDL_FONTS                   = $0014;          // windowsfonts
  {$EXTERNALSYM CSIDL_FONTS}
  CSIDL_TEMPLATES               = $0015;
  {$EXTERNALSYM CSIDL_TEMPLATES}
  CSIDL_COMMON_STARTMENU        = $0016;          // All UsersStart Menu
  {$EXTERNALSYM CSIDL_COMMON_STARTMENU}
  CSIDL_COMMON_PROGRAMS         = $0017;          // All UsersStart MenuPrograms
  {$EXTERNALSYM CSIDL_COMMON_PROGRAMS}
  CSIDL_COMMON_STARTUP          = $0018;          // All UsersStartup
  {$EXTERNALSYM CSIDL_COMMON_STARTUP}
  CSIDL_COMMON_DESKTOPDIRECTORY = $0019;          // All UsersDesktop
  {$EXTERNALSYM CSIDL_COMMON_DESKTOPDIRECTORY}
  CSIDL_APPDATA                 = $001a;          // <user name>Application Data
  {$EXTERNALSYM CSIDL_APPDATA}
  CSIDL_PRINTHOOD               = $001b;          // <user name>PrintHood
  {$EXTERNALSYM CSIDL_PRINTHOOD}
  CSIDL_LOCAL_APPDATA           = $001c;          // <user name>Local SettingsApplicaiton Data (non roaming)
  {$EXTERNALSYM CSIDL_LOCAL_APPDATA}
  CSIDL_ALTSTARTUP              = $001d;          // non localized startup
  {$EXTERNALSYM CSIDL_ALTSTARTUP}
  CSIDL_COMMON_ALTSTARTUP       = $001e;          // non localized common startup
  {$EXTERNALSYM CSIDL_COMMON_ALTSTARTUP}
  CSIDL_COMMON_FAVORITES        = $001f;
  {$EXTERNALSYM CSIDL_COMMON_FAVORITES}
  CSIDL_INTERNET_CACHE          = $0020;  //C:UsersAdminAppDataLocalMicrosoftWindowsINetCache
  {$EXTERNALSYM CSIDL_INTERNET_CACHE}
  CSIDL_COOKIES                 = $0021;
  {$EXTERNALSYM CSIDL_COOKIES}
  CSIDL_HISTORY                 = $0022;
  {$EXTERNALSYM CSIDL_HISTORY}
  CSIDL_COMMON_APPDATA          = $0023;          // All UsersApplication Data
  {$EXTERNALSYM CSIDL_COMMON_APPDATA}
  CSIDL_WINDOWS                 = $0024;          // GetWindowsDirectory()
  {$EXTERNALSYM CSIDL_WINDOWS}
  CSIDL_SYSTEM                  = $0025;          // GetSystemDirectory()
  {$EXTERNALSYM CSIDL_SYSTEM}
  CSIDL_PROGRAM_FILES           = $0026;          // C:Program Files
  {$EXTERNALSYM CSIDL_PROGRAM_FILES}
  CSIDL_MYPICTURES              = $0027;          // C:Program FilesMy Pictures
  {$EXTERNALSYM CSIDL_MYPICTURES}
  CSIDL_PROFILE                 = $0028;          // USERPROFILE
  {$EXTERNALSYM CSIDL_PROFILE}
  CSIDL_SYSTEMX86               = $0029;          // x86 system directory on RISC
  {$EXTERNALSYM CSIDL_SYSTEMX86}
  CSIDL_PROGRAM_FILESX86        = $002a;          // x86 C:Program Files on RISC
  {$EXTERNALSYM CSIDL_PROGRAM_FILESX86}
  CSIDL_PROGRAM_FILES_COMMON    = $002b;          // C:Program FilesCommon
  {$EXTERNALSYM CSIDL_PROGRAM_FILES_COMMON}
  CSIDL_PROGRAM_FILES_COMMONX86 = $002c;          // x86 Program FilesCommon on RISC
  {$EXTERNALSYM CSIDL_PROGRAM_FILES_COMMONX86}
  CSIDL_COMMON_TEMPLATES        = $002d;          // All UsersTemplates
  {$EXTERNALSYM CSIDL_COMMON_TEMPLATES}
  CSIDL_COMMON_DOCUMENTS        = $002e;          // All UsersDocuments
  {$EXTERNALSYM CSIDL_COMMON_DOCUMENTS}
  CSIDL_COMMON_ADMINTOOLS       = $002f;          // All UsersStart MenuProgramsAdministrative Tools
  {$EXTERNALSYM CSIDL_COMMON_ADMINTOOLS}
  CSIDL_ADMINTOOLS              = $0030;          // <user name>Start MenuProgramsAdministrative Tools
  {$EXTERNALSYM CSIDL_ADMINTOOLS}
  CSIDL_CONNECTIONS             = $0031;          // Network and Dial-up Connections
  {$EXTERNALSYM CSIDL_CONNECTIONS}
  CSIDL_COMMON_MUSIC            = $0035;          // All UsersMy Music
  {$EXTERNALSYM CSIDL_COMMON_MUSIC}
  CSIDL_COMMON_PICTURES         = $0036;          // All UsersMy Pictures
  {$EXTERNALSYM CSIDL_COMMON_PICTURES}
  CSIDL_COMMON_VIDEO            = $0037;          // All UsersMy Video
  {$EXTERNALSYM CSIDL_COMMON_VIDEO}
  CSIDL_RESOURCES               = $0038;          // Resource Direcotry
  {$EXTERNALSYM CSIDL_RESOURCES}
  CSIDL_RESOURCES_LOCALIZED     = $0039;          // Localized Resource Direcotry
  {$EXTERNALSYM CSIDL_RESOURCES_LOCALIZED}
  CSIDL_COMMON_OEM_LINKS        = $003a;          // Links to All Users OEM specific apps
  {$EXTERNALSYM CSIDL_COMMON_OEM_LINKS}
  CSIDL_CDBURN_AREA             = $003b;          // USERPROFILELocal SettingsApplication DataMicrosoftCD Burning
  {$EXTERNALSYM CSIDL_CDBURN_AREA}
  // unused                               0x003c
  CSIDL_COMPUTERSNEARME         = $003d;          // Computers Near Me (computered from Workgroup membership)
  {$EXTERNALSYM CSIDL_COMPUTERSNEARME}
  CSIDL_FLAG_CREATE             = $8000;          // combine with CSIDL_ value to force folder creation in SHGetFolderPath()
  {$EXTERNALSYM CSIDL_FLAG_CREATE}
  CSIDL_FLAG_DONT_VERIFY        = $4000;          // combine with CSIDL_ value to return an unverified folder path
  {$EXTERNALSYM CSIDL_FLAG_DONT_VERIFY}
  CSIDL_FLAG_DONT_UNEXPAND      = $2000;          // combine with CSIDL_ value to avoid unexpanding environment variables
  {$EXTERNALSYM CSIDL_FLAG_DONT_UNEXPAND}
  CSIDL_FLAG_NO_ALIAS           = $1000;          // combine with CSIDL_ value to insure non-alias versions of the pidl
  {$EXTERNALSYM CSIDL_FLAG_NO_ALIAS}
  CSIDL_FLAG_PER_USER_INIT      = $0800;          // combine with CSIDL_ value to indicate per-user init (eg. upgrade)
  {$EXTERNALSYM CSIDL_FLAG_PER_USER_INIT}
  CSIDL_FLAG_MASK               = $FF00;          // mask for all possible flag values
  {$EXTERNALSYM CSIDL_FLAG_MASK}


uses
  Vcl.ExtActns,Winapi.ShlObj, Winapi.ActiveX, System.Win.ComObj,
  ShellApi,Winapi.Windows;

function GetSpecialFolderDir(const folderid: integer): string;
var
  pidl: pItemIDList;
  buffer: array[0..255] of char;
begin
  SHGetSpecialFolderLocation(0, folderid, pidl);
  SHGetPathFromIDList(pidl, buffer);
  Result := strpas(buffer);
end;

//C:UsersAdminAppDataLocalMicrosoftWindowsINetCache
procedure TForm1.Button2Click(Sender: TObject);
begin
    eDIT1.Text:=GetSpecialFolderDir( CSIDL_INTERNET_CACHE );
end;







 
获取WINDOWS特殊文件夹


unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
uses shlobj;
{$R *.dfm}
 
function GetSpecialFolderDir(const folderid:integer):string;
var
    pidl:pItemIDList;
    buffer:array [ 0..255 ] of char ;
begin
    SHGetSpecialFolderLocation( application.Handle , folderid, pidl);
    SHGetPathFromIDList(pidl, buffer);
    Result:=strpas(buffer);
end;
 
 
 
procedure TForm1.Button1Click(Sender: TObject);
var
  DataBaseFolder:string;
begin
     {GetSpecialFolderDir( CSIDL_PERSONAL )
    = D:AdministratorDocuments}

     {D:AdministratorDocumentsDataBase}
     DataBaseFolder:=GetSpecialFolderDir( CSIDL_PERSONAL ) + 'DataBase';
     if not DirectoryExists(DataBaseFolder) then
        if not CreateDir(DataBaseFolder) then
            Application.MessageBox('创建数据文件夹失败','错误',MB_ICONERROR);
end;
 
end.



 
 
 
打 '*'

号的为不是真正的文件系统 ,应该用作它用。

CSIDL_BITBUCKET * 回收站

CSIDL_CONTROLS * 控制面板

CSIDL_DESKTOP * 桌面

CSIDL_DESKTOPDIRECTORY 桌面目录 // 如 C:WINDOWSDesktop

CSIDL_DRIVES * 我的电脑

CSIDL_FONTS 字体 // 如 C:WINDOWSFONTS

CSIDL_NETHOOD 网上邻居目录 // 如 C:WINDOWSNetHood

CSIDL_NETWORK * 网上邻居

CSIDL_PERSONAL 我的文档 // 如 C:My Documents

CSIDL_PRINTERS * 打印机

CSIDL_PROGRAMS 程序组 // 如 C:WINDOWSStart MenuPrograms

CSIDL_RECENT 最近文档 // 如 C:WINDOWSRecent

CSIDL_SENDTO 发送到 // 如 C:WINDOWSSentTo

CSIDL_STARTMENU 开始菜单 // 如 C:WINDOWSStart Menu

CSIDL_STARTUP 启动 // 如 C:WINDOWS 启动

CSIDL_TEMPLATES 模版 // 如 C:WINDOWSShellNew

 
 
 
 
 
 
 




原文地址:https://www.cnblogs.com/xe2011/p/3721650.html