Метод 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. Если в массиве несколько элементов, используйте побитовое И для объединения атрибутов между элементами. Например, если массив содержит два элемента, один из которых может быть перемещен (SFGAO_CANMOVE), а второй — нет, метод возвращает значение (1 & 0) или 0 для этого бита атрибута.

SIATTRIBFLAGS_OR (0x00000002)

0x00000002. Если в массиве несколько элементов, используйте побитовое ИЛИ для объединения атрибутов между элементами. Например, если массив содержит два элемента, один из которых может быть перемещен (SFGAO_CANMOVE), а второй — нет, метод возвращает значение (1 | 0) или 1 для этого бита атрибута.

SIATTRIBFLAGS_APPCOMPAT (0x00000003)

0x00000003. Извлеките атрибуты непосредственно из источника данных оболочки. Чтобы использовать это значение, массив элементов оболочки должен быть инициализирован как IShellFolder с его содержимым, указанным как массив дочерних PIDL.

SIATTRIBFLAGS_MASK (0x00000003)

0x00000003. Маска для SIATTRIBFLAGS_AND, SIATTRIBFLAGS_OR и SIATTRIBFLAGS_APPCOMPAT. Вызывающие абоненты обычно не используют это значение.

SIATTRIBFLAGS_ALLITEMS (0x00004000)

0x00004000. Windows 7 и более поздние версии. Проверьте все элементы в массиве, чтобы вычислить атрибуты. Обратите внимание, что это может привести к снижению производительности больших массивов, поэтому его следует использовать только при необходимости. Случаи, в которых вы передаете этот флаг, должны быть крайне редкими. Дополнительные сведения см. в разделе Примечания.

[in] sfgaoMask

Тип: SFGAOF

Маска, указывающая, какие именно атрибуты запрашиваются. Побитовое ИЛИ одного или нескольких значений SFGAO .

[out] psfgaoAttribs

Тип: SFGAOF*

Растровое изображение, которое при успешном возврате этого метода содержит значения запрошенных атрибутов.

Возвращаемое значение

Тип: HRESULT

Возвращает S_OK, если возвращенные атрибуты точно соответствуют атрибутам, запрошенным в sfgaoMask, S_FALSE, если атрибуты не совпадают, или значение стандартной ошибки COM в противном случае.

Комментарии

Массив элементов оболочки кэширует отдельные атрибуты после их определения.

Так как этот метод проходит через массив, собирающий сведения об атрибуте, он обычно перестает просматривать определенный атрибут после того, как это значение задается безвозвратно. Например, если установлен флаг SIATTRIBFLAGS_AND, после того как атрибут не задан для элемента (значение 0), нет необходимости продолжать изучение этого значения атрибута для других элементов, так как результат операции AND всегда будет равен 0. Таким образом, окончательный набор атрибутов обычно вычисляется путем просмотра только первых нескольких элементов в массиве, что является все, что необходимо для получения окончательного значения. Если необходимо изучить все элементы в массиве, установите флаг SIATTRIBFLAGS_ALLITEMS. Однако имейте в виду, что это может значительно замедлить возврат метода, поэтому не делайте этого без причины.

Требования

Требование Значение
Минимальная версия клиента Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2008 [только классические приложения]
Целевая платформа Windows
Header shobjidl_core.h (включая Shobjidl.h)