[函数] Delphi FMX Windows 取得下载 Downloads 目录

在 Firemonkey 提供了一个跨平台的函数 TPath.GetDownloadsPath来取得该平台的下载目录,但是非常奇怪的是,在 Windows 平台下,取得的下载目录确是:

C:\Users\\AppData\Local (

而不是

C:\Users\\Downloads

也许 EMB 想的是 App 沙箱做法,但如果想要取得C:\Users\\Downloads 这个目录该如何做呢?

可以扩展 TPath 功能,参考如下:

<span style="color: #0000ff;">interface

<span style="color: #0000ff;">uses
<span style="color: #008000;">{<span style="color: #008000;">$IFDEF MSWINDOWS<span style="color: #008000;">}<span style="color: #000000;">
Winapi.Windows,Winapi.ShlObj,Winapi.KnownFolders,<span style="color: #008000;">{<span style="color: #008000;">$ENDIF<span style="color: #008000;">}<span style="color: #000000;">

System.IOUtils;

<span style="color: #0000ff;">type<span style="color: #000000;">
TPathHelper = <span style="color: #0000ff;">record helper <span style="color: #0000ff;">for<span style="color: #000000;"> TPath
<span style="color: #0000ff;">class <span style="color: #0000ff;">function GetWinDownloadsPath: <span style="color: #0000ff;">string<span style="color: #000000;">; static;
<span style="color: #0000ff;">end<span style="color: #000000;">;

<span style="color: #0000ff;">implementation

<span style="color: #0000ff;">class <span style="color: #0000ff;">function TPathHelper.GetWinDownloadsPath: <span style="color: #0000ff;">string<span style="color: #000000;">;
<span style="color: #008000;">{<span style="color: #008000;">$IFDEF MSWINDOWS<span style="color: #008000;">}
<span style="color: #0000ff;">var<span style="color: #000000;"> Path: PWideChar;
<span style="color: #0000ff;">begin
<span style="color: #0000ff;">if Succeeded(SHGetKnownFolderPath(FOLDERID_Downloads,<span style="color: #800080;">0,Path)) <span style="color: #0000ff;">then<span style="color: #000000;">
Result :=<span style="color: #000000;"> String(Path)
<span style="color: #0000ff;">else Result := <span style="color: #800000;">''<span style="color: #000000;">;
<span style="color: #0000ff;">end<span style="color: #000000;">;
<span style="color: #008000;">{<span style="color: #008000;">$ELSE<span style="color: #008000;">}
<span style="color: #0000ff;">begin<span style="color: #000000;">
Result := <span style="color: #800000;">''<span style="color: #000000;">;
<span style="color: #0000ff;">end<span style="color: #000000;">;
<span style="color: #008000;">{<span style="color: #008000;">$ENDIF<span style="color: #008000;">}

<span style="color: #0000ff;">end.

使用方法:

<span style="color: #0000ff;">var<span style="color: #000000;"> DownloadPsth: String;
<span style="color: #0000ff;">begin<span style="color: #000000;">
DownloadPath :=<span style="color: #000000;"> TPath.GetWinDownloadsPath;
<span style="color: #0000ff;">end;

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...