通过 SHGetSpecialFolderLocation、SHGetPathFromIDList 函数获取常用路径

本例效果图:



代码文件:
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;

end.

  
窗体文件:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 318
  ClientWidth = 465
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object Memo1: TMemo
    Left = 0
    Top = 0
    Width = 465
    Height = 318
    Align = alClient
    Lines.Strings = (
      'Memo1')
    ScrollBars = ssBoth
    TabOrder = 0
    ExplicitWidth = 409
  end
end

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...