IShellItemArray::GetAttributes 方法 (shobjidl_core.h)

获取 IShellItemArray 中包含的项集的属性。 如果数组包含多个项,则此方法检索的属性不是单个项的属性,而是所有项的所有请求属性的逻辑组合。

语法

HRESULT GetAttributes(
  [in]  SIATTRIBFLAGS AttribFlags,
  [in]  SFGAOF        sfgaoMask,
  [out] SFGAOF        *psfgaoAttribs
);

参数

[in] AttribFlags

类型: SIATTRIBFLAGS

如果数组包含单个项,则此方法提供与 GetAttributes 相同的结果。 但是,如果数组包含多个项,则所有项的属性集将合并为单个属性集,并在 psfgaoAttribs 指向的值中返回。 此参数采用以下值之一来定义如何确定最终特性集:

SIATTRIBFLAGS_AND (0x00000001)

0x00000001。 如果数组中有多个项,请使用按位 AND 跨项组合属性。 例如,如果数组包含两个项,其中一个项可以移动 (SFGAO_CANMOVE) ,而第二个项不能移动,则该方法返回 (1 & 0) 或 0。

SIATTRIBFLAGS_OR (0x00000002)

0x00000002。 如果数组中有多个项,请使用按位 OR 来合并各个项的属性。 例如,如果数组包含两个项,其中一个项可以移动 (SFGAO_CANMOVE) ,而第二个项不能移动,则该方法返回 (1 |0) 或 1 表示该属性位。

SIATTRIBFLAGS_APPCOMPAT (0x00000003)

0x00000003。 直接从 Shell 数据源检索属性。 若要使用此值,Shell 项数组必须已初始化为 IShellFolder ,其内容指定为子 PIDL 数组。

SIATTRIBFLAGS_MASK (0x00000003)

0x00000003。 用于SIATTRIBFLAGS_AND、SIATTRIBFLAGS_OR和SIATTRIBFLAGS_APPCOMPAT的掩码。 调用方通常不使用此值。

SIATTRIBFLAGS_ALLITEMS (0x00004000)

0x00004000。 Windows 7 及更高版本。 检查数组中的所有项以计算属性。 请注意,这可能会导致大型数组的性能不佳,因此应仅在需要时使用它。 传递此标志的情况应非常罕见。 有关更多详细信息,请参阅“备注”。

[in] sfgaoMask

类型: SFGAOF

一个掩码,用于指定要请求的特定属性。 一个或多个 SFGAO 值的按位 OR。

[out] psfgaoAttribs

类型: SFGAOF*

此方法成功返回时包含所请求属性的值的位图。

返回值

类型: HRESULT

如果返回的属性与 sfgaoMask 中请求的属性完全匹配,则返回S_OK;如果属性不完全匹配,则返回S_FALSE,否则返回标准 COM 错误值。

注解

Shell 项数组在确定单个属性后缓存这些属性。

当此方法通过数组收集属性信息时,它通常会在不可撤销地设置该值后停止查看特定属性。 例如,如果设置了SIATTRIBFLAGS_AND标志,则发现某个属性未在 (值 0) 的项上设置,则无需继续检查其他项的该属性值,因为 AND 操作的结果始终为 0。 因此,通常通过只查看数组中的前几个项来计算最终属性集,这是获取最终值所需的全部内容。 如果需要检查数组中的所有项,请设置SIATTRIBFLAGS_ALLITEMS标志。 但是,请注意,这会大大减慢方法的返回速度,因此不要在没有原因的情况下这样做。

要求

要求
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 [仅限桌面应用]
目标平台 Windows
标头 shobjidl_core.h (包括 Shobjidl.h)