Массивы сопоставлений

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

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

Сведения о массивах сопоставлений

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

Оболочка использует массивы сопоставлений для запроса предопределенного набора расположений реестра, которые могут содержать сведения об элементе. 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\Unknown.

  • Расширение имени файла регистрируется в подразделе 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
    • Команды

Другие распространенные массивы сопоставлений включают папки и принтеры.

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

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

Типы файлов

Принципы работы сопоставлений файлов

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

Средство проверки типов файлов

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

Программные идентификаторы

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