• 通过 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.
    
    
  • 相关阅读:
    关于服务器并发量的简单计算
    重温Android和Fragment生命周期
    JVM类加载机制
    设计六大原则总结
    Android Navigation使用
    Android BrocastReceiver解析
    Android LiveData使用
    Android Service解析
    Activity的生命周期和启动模式
    Java四种引用
  • 原文地址:https://www.cnblogs.com/jxgxy/p/1348997.html
Copyright © 2020-2023  润新知