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
- matrizes de associação de consulta
- trabalhando com matrizes de associação para um específico da fonte de dados do Shell
- recursos adicionais
- tópicos relacionados
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 será exibido 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 o fornece. Por exemplo, o valor do ícone padrão é recuperado dessa forma. 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 a partir dos 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 Windows padrão, um arquivo .jpg tem a seguinte matriz de associação:
- HKEY_CLASSES_ROOT\ jpgfile
- HKEY_CLASSES_ROOT\\.jpg SystemFileAssociations
- HKEY_CLASSES_ROOT\imagem
- HKEY_CLASSES_ROOT\*
- HKEY_CLASSES_ROOT\ AllFilesystemObjects
Para obter informações sobre como registrar matrizes de associação, consulte de 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 construir uma matriz de associação IQueryAssociations objeto que pode ser consultado:
- assocCreate (antes do Windows Vista)
- AssocCreateForClasses
- AssocQueryString
Trabalhando com matrizes de associação para uma fonte de dados do 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 da 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 é usado.
A extensão de nome de arquivo é registrada em HKEY_CLASSES_ROOT\SystemFileAssociations\subchave .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 do Diretório HKEY_CLASSES_ROOT\ Pastas do sistema de arquivos da Pasta HKEY_CLASSES_ROOT\ Contêineres de shell
Matrizes de associação da fonte de dados do Shell
A lista a seguir representa algumas das matrizes de associação do repositório de dados shell que podem ser usadas para as finalidades descritas neste tópico:
- HKEY_CLASSES_ROOT\*
- HKEY_CLASSES_ROOT\ AllFilesystemObjects
- HKEY_CLASSES_ROOT\Kind.Document
- de Resultados do HKEY_CLASSES_ROOT\
- HKEY_CLASSES_ROOT\\.docx SystemFileAssociations
- 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
- Para criar um repositório de dados shell, consulte Implementando as interfaces básicas de objeto de pasta.
Tópicos relacionados