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


Массивы ассоциаций

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

Этот раздел организован следующим образом:

Сведения о массивах ассоциаций

Массив ассоциаций — это упорядоченный список расположений реестра, содержащих сведения о типе элемента, включая обработчики, команды и другие атрибуты, такие как значок и отображаемое имя типа. Эта информация о типе элемента может быть зарегистрирована на различных уровнях конкретности. Например, можно зарегистрировать команду, которая будет отображаться только для определенного типа файла (например, .jpg), или для всех элементов с одинаковым system.Kind (например, System.kind = рисунок) или для всех элементов.

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

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

Так как массивы сопоставлений упорядочены, они предоставляют разработчикам приложений механизм для добавления сведений в реестр, которые будут возвращены для определенного типа элемента. Аналогичным образом массивы ассоциаций позволяют разработчикам приложений добавлять сведения в реестр для определенной группы элементов, когда эти элементы регистрируются в более общем расположении. Эта логика сообщает вашему решению о наиболее подходящем расположении в реестре для хранения сведений о элементах оболочки.

В системе Windows по умолчанию .jpg-файл имеет следующий массив сопоставлений:

  • HKEY_CLASSES_ROOT\jpgfile
  • HKEY_CLASSES_ROOT\SystemFileAssociations\.jpg
  • HKEY_CLASSES_ROOT\изображения
  • HKEY_CLASSES_ROOT\*
  • HKEY_CLASSES_ROOT\AllFilesystemObjects

Сведения о регистрации массивов ассоциаций см. в регистрации приложений.

Запросы массивов ассоциаций

Существуют API оболочки для получения сведений из диапазона вложенных разделов реестра, от наиболее конкретного подраздела реестра до супермножества сведений во всех подразделах реестра.

Наиболее распространенное использование массива ассоциаций заключается в запросе к одному значению, возвращаемого оболочкой из наиболее конкретного элемента в массиве с запрошенной информацией. В следующем примере кода показано, как это сделать.

IQueryAssociations *pqa;

// pShellItem is assumed to be an existing IShellItem object.
hr = pShellItem->BindToHandler(NULL, BHID_AssociationArray, IID_PPV_ARGS(&pqa));
if (SUCCEEDED(hr))
{
    wchar_t szValue[256];
    DWORD cbValue = sizeof(szValue);      // Count of bytes in the array

    hr = pqa->GetData(0, ASSOCDATA_VALUE, L"InfoTip", szValue, &cbValue);
    if (SUCCEEDED(hr))
    {
        // The "InfoTip" value is used to compute the infotip string from
        // properties of an item.
    }
    pqa->Release();
}

Следующие API можно использовать для запроса массива ассоциаций или создания массива ассоциаций объекта IQueryAssociations, который можно запросить:

Работа с массивами ассоциаций для определенного источника данных оболочки

Каждый источник данных Оболочки определяет массив связей для своих элементов. Определение массива ассоциаций обычно является функцией типа элемента. Реализующие источники данных оболочки должны определять и документировать массивы ассоциаций, чтобы приложения могли расширить поведение этих типов, например для регистрации команд или других сведений. Приложения могут расширить поведение элементов на основе добавления данных в вложенные ключи массива ассоциаций, таких как добавление команд для элементов.

Источник данных файловой системы создает массив сопоставлений для файлов на основе следующих подразделов реестра и специальных идентификаторов ProgID:

  • Если файл имеет зарегистрированный progID, используется HKEY_CLASSES_ROOT\ProgID. В противном случае используется HKEY_CLASSES_ROOT\Неизвестный.

  • Расширение имени файла зарегистрировано в подразделе HKEY_CLASSES_ROOT\SystemFileAssociations\.fileExtension.

  • Специальные идентификаторы progID показаны в следующей таблице.

    Специальный progID Описание
    HKEY_CLASSES_ROOT\* Все файлы (не папки)
    HKEY_CLASSES_ROOT\AllFilesystemObjects Папки файлов и файловой системы
    HKEY_CLASSES_ROOT\каталогов Папки файловой системы
    папки HKEY_CLASSES_ROOT\ Контейнеры оболочки

     

Массивы сопоставления источников данных оболочки

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

  • HKEY_CLASSES_ROOT\*
  • HKEY_CLASSES_ROOT\AllFilesystemObjects
  • HKEY_CLASSES_ROOT\Kind.Document
  • результатов HKEY_CLASSES_ROOT\
  • HKEY_CLASSES_ROOT\SystemFileAssociations\.docx
  • HKEY_CLASSES_ROOT\Word.Document.12

Массивы сопоставлений источников данных оболочки, которые можно использовать для DBFolder (хранилище данных Оболочки, представляющее элементы в результатах поиска и представлениях на основе запросов), выглядит следующим образом:

  • Диски
  • Сеть
  • RegItems
  • Примеры:
    • ContentView
    • Глаголы

К другим общим массивам сопоставлений относятся папки и принтеры.

Дополнительные ресурсы

регистрации приложений

типов файлов

как работают сопоставления файлов

представление содержимого по типу файла или типу

проверяющего типа файла

обработчики типов файлов

программных идентификаторов

предполагаемые типы