delphi 通过 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..56] 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.

相关阅读 >>

Delphi 个人所得税计算函数

Delphi 用 superobject 解析淘宝上的 json 数据

Delphi写qq消息群发(模拟按键精灵)

Delphi xe tparallel.for循环

Delphi 返回下载地址的文件名

Delphi 实现文件分割合并

Delphi tlistview(tlistbox+图标显示)

Delphi 通过api强制tedit仅接受数字输入

Delphi setlength 内存释放总结

Delphi 合并两个 wav 文件流的函数

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...