获取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 Menu\Programs
  {$EXTERNALSYM CSIDL_PROGRAMS}
  CSIDL_CONTROLS                = $0003;          // My Computer\Control Panel
  {$EXTERNALSYM CSIDL_CONTROLS}
  CSIDL_PRINTERS                = $0004;          // My Computer\Printers
  {$EXTERNALSYM CSIDL_PRINTERS}
  CSIDL_PERSONAL                = $0005;          // My Documents
  {$EXTERNALSYM CSIDL_PERSONAL}
  CSIDL_FAVORITES               = $0006;          // <user name>\Favorites
  {$EXTERNALSYM CSIDL_FAVORITES}
  CSIDL_STARTUP                 = $0007;          // Start Menu\Programs\Startup
  {$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>\nethood
  {$EXTERNALSYM CSIDL_NETHOOD}
  CSIDL_FONTS                   = $0014;          // windows\fonts
  {$EXTERNALSYM CSIDL_FONTS}
  CSIDL_TEMPLATES               = $0015;
  {$EXTERNALSYM CSIDL_TEMPLATES}
  CSIDL_COMMON_STARTMENU        = $0016;          // All Users\Start Menu
  {$EXTERNALSYM CSIDL_COMMON_STARTMENU}
  CSIDL_COMMON_PROGRAMS         = $0017;          // All Users\Start Menu\Programs
  {$EXTERNALSYM CSIDL_COMMON_PROGRAMS}
  CSIDL_COMMON_STARTUP          = $0018;          // All Users\Startup
  {$EXTERNALSYM CSIDL_COMMON_STARTUP}
  CSIDL_COMMON_DESKTOPDIRECTORY = $0019;          // All Users\Desktop
  {$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 Settings\Applicaiton 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:\Users\Admin\AppData\Local\Microsoft\Windows\INetCache
  {$EXTERNALSYM CSIDL_INTERNET_CACHE}
  CSIDL_COOKIES                 = $0021;
  {$EXTERNALSYM CSIDL_COOKIES}
  CSIDL_HISTORY                 = $0022;
  {$EXTERNALSYM CSIDL_HISTORY}
  CSIDL_COMMON_APPDATA          = $0023;          // All Users\Application 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 Files\My 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 Files\Common
  {$EXTERNALSYM CSIDL_PROGRAM_FILES_COMMON}
  CSIDL_PROGRAM_FILES_COMMONX86 = $002c;          // x86 Program Files\Common on RISC
  {$EXTERNALSYM CSIDL_PROGRAM_FILES_COMMONX86}
  CSIDL_COMMON_TEMPLATES        = $002d;          // All Users\Templates
  {$EXTERNALSYM CSIDL_COMMON_TEMPLATES}
  CSIDL_COMMON_DOCUMENTS        = $002e;          // All Users\Documents
  {$EXTERNALSYM CSIDL_COMMON_DOCUMENTS}
  CSIDL_COMMON_ADMINTOOLS       = $002f;          // All Users\Start Menu\Programs\Administrative Tools
  {$EXTERNALSYM CSIDL_COMMON_ADMINTOOLS}
  CSIDL_ADMINTOOLS              = $0030;          // <user name>\Start Menu\Programs\Administrative Tools
  {$EXTERNALSYM CSIDL_ADMINTOOLS}
  CSIDL_CONNECTIONS             = $0031;          // Network and Dial-up Connections
  {$EXTERNALSYM CSIDL_CONNECTIONS}
  CSIDL_COMMON_MUSIC            = $0035;          // All Users\My Music
  {$EXTERNALSYM CSIDL_COMMON_MUSIC}
  CSIDL_COMMON_PICTURES         = $0036;          // All Users\My Pictures
  {$EXTERNALSYM CSIDL_COMMON_PICTURES}
  CSIDL_COMMON_VIDEO            = $0037;          // All Users\My 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;          // USERPROFILE\Local Settings\Application Data\Microsoft\CD 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:\Users\Admin\AppData\Local\Microsoft\Windows\INetCache
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:\Administrator\Documents}

     {D:\Administrator\Documents\DataBase}
     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:\WINDOWS\Desktop

CSIDL_DRIVES * 我的电脑

CSIDL_FONTS 字体 // 如 C:\WINDOWS\FONTS

CSIDL_NETHOOD 网上邻居目录 // 如 C:\WINDOWS\NetHood

CSIDL_NETWORK * 网上邻居

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

CSIDL_PRINTERS * 打印机

CSIDL_PROGRAMS 程序组 // 如 C:\WINDOWS\Start Menu\Programs

CSIDL_RECENT 最近文档 // 如 C:\WINDOWS\Recent

CSIDL_SENDTO 发送到 // 如 C:\WINDOWS\SentTo

CSIDL_STARTMENU 开始菜单 // 如 C:\WINDOWS\Start Menu

CSIDL_STARTUP 启动 // 如 C:\WINDOWS\ 启动

CSIDL_TEMPLATES 模版 // 如 C:\WINDOWS\ShellNew

 
 
 
 
 
 
 




posted @ 2014-05-11 12:21  XE2011  阅读(383)  评论(0编辑  收藏  举报