【问题标题】:How to get folder path from Known folder GUID in Delphi如何从 Delphi 中的已知文件夹 GUID 获取文件夹路径
【发布时间】:2013-02-10 20:54:39
【问题描述】:

我有一个KNOWNFOLDERID,我想知道对应的路径,例如 C:....\folder。

KNOWNFOLDERID 可以在这里找到。 http://msdn.microsoft.com/en-us/library/bb762584%28VS.85%29.aspx

我想使用win api (我不想构建一个包含所有 KNOWNFOLDERID 和路径的数组)。

谢谢

【问题讨论】:

    标签: windows delphi winapi delphi-7 known-folders


    【解决方案1】:

    只需调用SHGetKnownFolderPath API 函数。

    由于此函数是在 Vista 中添加的,因此不会在 Delphi 7 附带的库单元中声明它。因此您需要自己声明它。

    type
      KNOWNFOLDERID = TGuid;
    
    function SHGetKnownFolderPath(
      const rfid: KNOWNFOLDERID;
      dwFlags: DWORD; 
      hToken: THandle; 
      out ppszPath: PWideChar
    ): HResult; stdcall; external 'Shell32.dll';
    

    现在,由于这个函数是在 Vista 中添加的,尝试在 XP 上调用它会导致失败。因此,我建议使用 CSIDL 函数而不是 Vista 已知文件夹 API 来处理这个问题。

    【讨论】:

    • GUID 以字符串形式给出。我可以使用 Stringtoguid 将字符串转换为 GUID,然后调用 SHGetKnownFolderPath
    【解决方案2】:

    您无法构建已知文件夹 ID 和路径的数组,因为无法保证每个系统中的路径都相同。已知文件夹有默认路径,但它们只是默认值,可以更改。许多公司环境这样做是为了,例如,将用户的文档文件夹移动到可以更轻松地备份的网络共享。

    无论如何,您提供的链接中的链接包含您需要的所有信息:

    SHGetKnownFolderPath 是返回已知文件夹路径的 Win API 函数。请注意,您需要通过调用 CoTaskMemFree 释放自己返回的 unicode char 指针。

    如果您更喜欢使用 COM 对象,则可以改用 IKNOWNFOLDER

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-22
      • 1970-01-01
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多