Поделиться через


Функция PSCreatePropertyChangeArray (propsys.h)

Создает контейнер для набора объектов IPropertyChange . Этот контейнер можно использовать с IFileOperation для применения набора изменений свойств к набору файлов.

Синтаксис

PSSTDAPI PSCreatePropertyChangeArray(
  [in, optional] const PROPERTYKEY *rgpropkey,
  [in, optional] const PKA_FLAGS   *rgflags,
  [in, optional] const PROPVARIANT *rgpropvar,
  [in]           UINT              cChanges,
  [in]           REFIID            riid,
  [out]          void              **ppv
);

Параметры

[in, optional] rgpropkey

Тип: const PROPERTYKEY*

Указатель на массив структур PROPERTYKEY , которые называют конкретные свойства, изменения которых хранятся. Если это значение равно NULL, значение cChanges должно быть равно 0.

[in, optional] rgflags

Тип: const PKA_FLAGS*

Указатель на массив PKA_FLAGS значений. Если это значение равно NULL, значение cChanges должно быть равно 0.

[in, optional] rgpropvar

Тип: const PROPVARIANT*

Указатель на массив структур PROPVARIANT . Если это значение равно NULL, значение cChanges должно быть равно 0.

[in] cChanges

Тип: UINT

Количество применяемых изменений. Это количество элементов в каждом массиве rgpropkey, rgflags и rgpropvar.

[in] riid

Тип: REFIID

Ссылка на идентификатор запрошенного интерфейса.

[out] ppv

Тип: void**

При возврате этой функции содержит указатель интерфейса, запрошенный в riid. Обычно это IPropertyChangeArray.

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

Тип: HRESULT

Если эта функция выполняется успешно, она возвращает S_OK. В противном случае возвращается код ошибки HRESULT .

Комментарии

Эта функция создает объект COM, реализующий IPropertyChangeArray. Этот объект является контейнером для набора интерфейсов IPropertyChange и может использоваться с IFileOperation для применения набора изменений свойств к набору файлов.

Перед вызовом PSCreatePropertyChangeArray необходимо инициализировать COM с помощью CoInitialize или OleInitialize. COM должен оставаться инициализированным в течение времени существования этого объекта. Массив изменений свойств выполняется в однопотоковом объекте (STA).

Массив изменений свойств можно инициализировать либо путем указания простых изменений с помощью параметров, либо с помощью различных методов IPropertyChangeArray для вставки или добавления дополнительных изменений.

Параметры связаны друг с другом по значению индекса. Например, для свойства rgpropkey[0] применяется новое значение rgpropvar[0] в соответствии с параметром rgflags[0]. Параметр cChanges указывает количество этих наборов. Поэтому количество элементов в каждом массиве должно быть одинаковым: ARRAYSIZE(rgpropkey) = ARRAYSIZE(rgflags) = ARRAYSIZE(rgpropvar) = cChanges.

IFileOperation применяет все изменения в массиве изменений свойств к файлу одновременно, чтобы избежать многократного открытия файла.

Примеры

В следующем примере, который будет включен в состав более крупной программы, показано, как использовать PSCreatePropertyChangeArray , чтобы задать для свойства Comment значение Fun, а для параметра Rating — значение 4 в одном или нескольких файлах.

// IFileOperation *pfo;
// Assume variable pfo has been initialized by calling SetOperationFlags, 
// ApplyPropertiesToItems, and SetProgressMessage as appropriate.
 
PROPVARIANT rgpropvar[2] = {0};

HRESULT hr = InitPropVariantFromString(L"Fun", &rgpropvar[0]);

if (SUCCEEDED(hr))
{
    hr = InitPropVariantFromUInt32(RATING_FOUR_STARS_SET, &rgpropvar[1]);

    if (SUCCEEDED(hr))
    {
        REFPROPERTYKEY rgkey[2] = {PKEY_Comment, PKEY_Rating};
        PKA_FLAGS rgflags[2] = {PKA_SET, PKA_SET};
        IPropertyChangeArray *pChangeArray;

        hr = PSCreatePropertyChangeArray(rgkey, rgflags, rgpropvar, 2, IID_PPV_ARGS(&pChangeArray));

        if (SUCCEEDED(hr))
        {
            hr = pfo->SetProperties(pChangeArray);

            if (SUCCEEDED(hr))
            {
                hr = pfo->PerformOperations();
            }
            pChangeArray->Release();
        }
    }
    ClearPropVariantArray(rgpropvar, ARRAYSIZE(rgpropvar));
}

Требования

Требование Значение
Минимальная версия клиента Windows XP с пакетом обновления 2 (SP2), Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2003 с пакетом обновления 1 (SP1) [только классические приложения]
Целевая платформа Windows
Header propsys.h
Библиотека Propsys.lib
DLL Propsys.dll (версия 6.0 или более поздняя)
Распространяемые компоненты Windows Desktop Search (WDS) 3.0

См. также раздел

PSCreateSimplePropertyChange