IShellFolder::P arseDisplayName 方法 (shobjidl_core.h)

将文件对象或文件夹的显示名称转换为项标识符列表。

语法

HRESULT ParseDisplayName(
  [in]      HWND             hwnd,
  [in]      IBindCtx         *pbc,
  [in]      LPWSTR           pszDisplayName,
  [out]     ULONG            *pchEaten,
  [out]     PIDLIST_RELATIVE *ppidl,
  [in, out] ULONG            *pdwAttributes
);

参数

[in] hwnd

类型:HWND

一个窗口句柄。 如果客户端显示对话框或消息框,则应提供窗口句柄。 否则,将 hwnd 设置为 NULL

[in] pbc

类型: IBindCtx*

可选。 指向绑定上下文的指针,用于将参数作为输入和输出传递给分析函数。 这些传递的参数通常特定于数据源,并由数据源所有者记录。 例如,文件系统数据源使用 STR_FILE_SYS_BIND_DATA 绑定上下文参数接受 (作为 WIN32_FIND_DATA 结构 ) 分析的名称。 可以传递STR_PARSE_PREFER_FOLDER_BROWSING,以指示使用文件系统数据源分析 URL(如果可能)。 使用 CreateBindCtx 构造绑定上下文对象,并使用 IBindCtx::RegisterObjectParam 填充值。 有关这些键的完整列表,请参阅 绑定上下文字符串键

如果未向分析函数传递或从中接收任何数据,则此值可以为 NULL

[in] pszDisplayName

类型: LPWSTR

显示名称为 null 的 Unicode 字符串。 由于每个 Shell 文件夹都定义自己的分析语法,因此此字符串可以采用的形式可能会有所不同。 例如,桌面文件夹接受“C:\My Docs\My File.txt”等路径。 它还将使用“::{GUID}”语法接受对命名空间中具有关联 GUID 的项的引用。 例如,若要从桌面文件夹检索控制面板的完全限定标识符列表,可以使用以下内容:

::{CLSID for Control Panel}\::{CLSID for printers folder}

[out] pchEaten

类型: ULONG*

指向 ULONG 值的指针,该值接收已分析的显示名称的字符数。 如果应用程序不需要此信息,请将 pchEaten 设置为 NULL,并且不会返回任何值。

[out] ppidl

类型: PIDLIST_RELATIVE*

此方法返回时,包含指向 对象的 PIDL 的指针。 返回的项标识符列表指定相对于分析文件夹的项。 如果与 pszDisplayName 关联的对象位于分析文件夹中,则返回的项目标识符列表将仅包含一个 SHITEMID 结构。 如果对象位于分析文件夹的子文件夹中,则返回的项目标识符列表将包含多个 SHITEMID 结构。 如果发生错误,此地址中将返回 NULL

当不再需要时,调用方负责通过调用 CoTaskMemFree 释放此资源。

[in, out] pdwAttributes

类型: ULONG*

用于查询文件属性的值。 如果未使用,应将其设置为 NULL。 若要查询一个或多个属性,请使用表示相关属性的 SFGAO 标志初始化此参数。 返回时,将设置那些为 true 已请求的属性。

返回值

类型: HRESULT

如果该方法成功,则返回 S_OK。 否则,将返回 HRESULT 错误代码。

注解

某些 Shell 文件夹可能无法实现 IShellFolder::P arseDisplayName。 每个执行 操作的文件夹将定义其自己的分析语法。

ParseDisplayName 不应处理 (“.”或“.”的相对路径或父文件夹指示器。) 。 由调用方适当删除这些内容。

请勿在 pdwAttributes 中使用 SFGAO_VALIDATE 标志来验证其名称被分析的项是否存在。 IShellFolder::P arseDisplayName 隐式验证项是否存在,除非该行为被特殊的绑定上下文参数重写。

查询某些属性可能相对较慢,并且会占用大量内存。 例如,为了确定是否共享文件,Shell 将加载网络组件。 此过程可能需要加载多个 DLL。 pdwAttributes 的用途是允许将查询限制为仅所需的信息。 以下代码片段演示了如何确定文件是否已压缩。

LPITEMIDLIST pidl;
ULONG cbEaten;
DWORD dwAttribs = SFGAO_COMPRESSED;

hres = psf->ParseDisplayName(NULL,
                             NULL,
                             lpwszDisplayName,
                             &cbEaten,  // This can be NULL
                             &pidl,
                             &dwAttribs);

if(dwAttribs & SFGAO_COMPRESSED)
{
    // Do something with the compressed file
}

由于 pdwAttributes 是一个 in/out 参数,因此应始终对其进行初始化。 如果传入未初始化的值,可能会无意中设置某些位。 然后,IShellFolder::P arseDisplayName 将查询相应的属性,这可能会导致不需要的延迟或内存需求。 如果不想查询属性,请将 pdwAttributes 设置为 NULL 以避免不可预知的行为。

此方法类似于 IParseDisplayName::P arseDisplayName 方法。

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 shobjidl_core.h (包括 Shobjidl.h)
DLL Shell32.dll (版本 4.0 或更高版本)

另请参阅

IShellFolder

IShellFolder2

IShellFolder::GetAttributesOf

IShellLink