Matrizes de Associação

Uma matriz de associação é uma lista ordenada de locais do Registro usados para armazenar informações sobre um tipo de item, incluindo manipuladores, verbos e outros atributos, como o ícone e o nome de exibição do tipo. O Shell usa matrizes de associação para consultar um conjunto predefinido de locais do Registro que podem conter informações sobre um item do Shell.

Este tópico é organizado da seguinte maneira:

Sobre matrizes de associação

Uma matriz de associação é uma lista ordenada de locais do Registro que contêm informações sobre um tipo de item, incluindo manipuladores, verbos e outros atributos, como o ícone e o nome de exibição do tipo. Essas informações sobre o tipo de item podem ser registradas em diferentes níveis de especificidade. Por exemplo, você pode registrar um verbo que aparecerá apenas para um tipo de arquivo específico (como .jpg) ou para todos os itens com o mesmo System.Kind (por exemplo, System.kind = picture) ou para todos os itens.

O Shell usa matrizes de associação para consultar um conjunto predefinido de locais do Registro que podem conter informações sobre o item. As APIs de matriz de associação podem ser usadas para recuperar da subchave do Registro um único valor que contém as informações solicitadas, com esse valor proveniente da primeira entrada na matriz que a fornece. Por exemplo, o valor do ícone padrão é recuperado dessa maneira. A matriz de associação também pode ser usada para recuperar um conjunto de valores armazenados nas subchaves do Registro. Por exemplo, a lista de verbos é criada com base nos verbos registrados em todas as subchaves.

Depois que o Shell consulta um conjunto predefinido de locais do Registro para obter informações sobre um item do Shell, ele coloca os locais do Registro em uma matriz na ordem do local mais específico para o mais geral.

Como as matrizes de associação são listas ordenadas, elas fornecem aos desenvolvedores de aplicativos um mecanismo para adicionar informações ao Registro que serão retornadas para um tipo específico de item. Da mesma forma, as matrizes de associação permitem que os desenvolvedores de aplicativos adicionem informações ao registro para um grupo específico de itens quando esses itens são registrados em um local mais geral. Essa lógica informa sua decisão sobre o local mais apropriado no registro para armazenar informações sobre itens do Shell.

Em um sistema Padrão do Windows, um arquivo .jpg tem a seguinte matriz de associação:

  • HKEY_CLASSES_ROOT\jpgfile
  • HKEY_CLASSES_ROOT\SystemFileAssociations\.jpg
  • HKEY_CLASSES_ROOT\Imagem
  • HKEY_CLASSES_ROOT\*
  • HKEY_CLASSES_ROOT\AllFilesystemObjects

Para obter informações sobre como registrar matrizes de associação, consulte Registro de Aplicativo.

Consultando matrizes de associação

Há APIs do Shell para recuperar informações de um intervalo de subchaves do Registro, desde a subchave do Registro mais específica até um superconjunto das informações em todas as subchaves do Registro.

O uso mais comum de uma matriz de associação é consultar um único valor que o Shell retorna do elemento mais específico na matriz que tem as informações solicitadas. O exemplo de código a seguir mostra como fazer isso.

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();
}

As SEGUINTEs APIs podem ser usadas para consultar uma matriz de associação ou para construir um objeto IQueryAssociations da matriz de associação que pode ser consultado:

Trabalhando com matrizes de associação para uma fonte de dados de shell específica

Cada fonte de dados do Shell define a matriz de associação para seus itens. Definir uma matriz de associação geralmente é uma função do tipo de item. Os implementadores de fonte de dados do Shell devem definir e documentar as matrizes de associação para permitir que os aplicativos estendam o comportamento desses tipos, como para registrar verbos ou outras informações. Os aplicativos podem estender o comportamento dos itens com base na adição de dados às subchaves da matriz de associação, como a adição de verbos para itens.

A fonte de dados do sistema de arquivos cria uma matriz de associação para arquivos com base nas seguintes subchaves do Registro e progIDs especiais:

  • Se o arquivo tiver um ProgID registrado, HKEY_CLASSES_ROOT\ProgID será usado. Caso contrário , HKEY_CLASSES_ROOT\Desconhecido será usado.

  • A extensão de nome de arquivo é registrada em HKEY_CLASSES_ROOT\ subchaveSystemFileAssociations.fileExtension\.

  • ProgIDs especiais são mostrados na tabela a seguir.

    ProgID especial Descrição
    HKEY_CLASSES_ROOT\* Todos os arquivos (não pastas)
    HKEY_CLASSES_ROOT\AllFilesystemObjects Arquivos e pastas do sistema de arquivos
    HKEY_CLASSES_ROOT\Diretório Pastas do sistema de arquivos
    HKEY_CLASSES_ROOT\Pasta Contêineres do Shell

     

Matrizes de associação de fonte de dados do Shell

A lista a seguir representa algumas das matrizes de associação de armazenamento de dados do Shell que podem ser usadas para as finalidades descritas neste tópico:

  • HKEY_CLASSES_ROOT\*
  • HKEY_CLASSES_ROOT\AllFilesystemObjects
  • HKEY_CLASSES_ROOT\Kind.Document
  • HKEY_CLASSES_ROOT\Resultados
  • HKEY_CLASSES_ROOT\SystemFileAssociations\.docx
  • HKEY_CLASSES_ROOT\Word. Document.12

Matrizes de associação de fonte de dados do Shell que podem ser usadas para DBFolder (um repositório de dados shell que representa itens nos resultados da pesquisa e exibições baseadas em consulta) são as seguintes:

  • Unidades
  • Rede
  • RegItems
  • Exemplos:
    • ContentView
    • Verbos

Outras matrizes de associação comuns incluem Pasta e Impressoras.

Recursos adicionais

Registro de aplicativo

Tipos de arquivo

Como funcionam as associações de arquivos

Exibição de conteúdo por tipo de arquivo ou tipo

Verificador de Tipo de Arquivo

Manipuladores de tipo de arquivo

Identificadores programáticos

Tipos percebidos