Matrices de asociación
Una matriz de asociación es una lista ordenada de ubicaciones del Registro usadas para almacenar información sobre un tipo de elemento, incluidos controladores, verbos y otros atributos, como el icono y el nombre para mostrar del tipo. El Shell usa matrices de asociación para consultar un conjunto predefinido de ubicaciones del Registro que pueden contener información sobre un elemento de Shell.
Este tema se organiza de la siguiente manera:
- Acerca de las matrices de asociación
- Consulta de matrices de asociación
- Trabajar con matrices de asociación para un origen de datos de Shell determinado
- Recursos adicionales
- Temas relacionados
Acerca de las matrices de asociación
Una matriz de asociación es una lista ordenada de ubicaciones del Registro que contienen información sobre un tipo de elemento, incluidos controladores, verbos y otros atributos, como el icono y el nombre para mostrar del tipo. Esta información sobre el tipo de elemento se puede registrar en distintos niveles de especificidad. Por ejemplo, puede registrar un verbo que solo se mostrará para un tipo de archivo específico (como .jpg) o para todos los elementos con el mismo System.Kind (por ejemplo, System.kind = imagen) o para todos los elementos.
Shell usa matrices de asociación para consultar un conjunto predefinido de ubicaciones del Registro que podrían contener información sobre el elemento. Las API de matriz de asociación se pueden usar para recuperar de la subclave del Registro un único valor que contiene la información solicitada, con ese valor procedente de la primera entrada de la matriz que la proporciona. Por ejemplo, el valor de icono predeterminado se recupera de esta manera. La matriz de asociación también se puede usar para recuperar un conjunto de valores almacenados en las subclaves del Registro. Por ejemplo, la lista de verbos se crea a partir de esos verbos registrados en todas las subclaves.
Después de que el Shell consulte un conjunto predefinido de ubicaciones del Registro para obtener información sobre un elemento de Shell, coloca las ubicaciones del Registro en una matriz en orden desde la ubicación más específica hasta la más general.
Dado que las matrices de asociación son listas ordenadas, proporcionan a los desarrolladores de aplicaciones un mecanismo para agregar información al registro que se devolverá para un tipo específico de elemento. Del mismo modo, las matrices de asociación permiten a los desarrolladores de aplicaciones agregar información al Registro para un grupo específico de elementos cuando esos elementos se registran en una ubicación más general. Esta lógica informa a la decisión sobre la ubicación más adecuada en el Registro para almacenar información sobre los elementos de Shell.
En un sistema windows predeterminado, un archivo .jpg tiene la siguiente matriz de asociación:
- HKEY_CLASSES_ROOT\jpgfile
- HKEY_CLASSES_ROOT\SystemFileAssociations\.jpg
- HKEY_CLASSES_ROOT\Imagen
- HKEY_CLASSES_ROOT\*
- HKEY_CLASSES_ROOT\AllFilesystemObjects
Para obtener información sobre cómo registrar matrices de asociación, consulte Registro de aplicaciones.
Consulta de matrices de asociación
Hay API de Shell para recuperar información de una serie de subclaves del Registro, desde la subclave del Registro más específica hasta un superconjunto de la información en todas las subclaves del Registro.
El uso más común de una matriz de asociación es consultar un valor único que el Shell devuelve del elemento más específico de la matriz que tiene la información solicitada. En el ejemplo de código siguiente se muestra cómo hacerlo.
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();
}
Las SIGUIENTES API se pueden usar para consultar una matriz de asociación o para construir un objeto IQueryAssociations de matriz de asociación que se puede consultar:
- AssocCreate (antes de Windows Vista)
- AssocCreateForClasses
- AssocQueryString
Trabajar con matrices de asociación para un origen de datos de Shell determinado
Cada origen de datos de Shell define la matriz de asociación para sus elementos. Definir una matriz de asociación suele ser una función del tipo de elemento. Los implementadores de orígenes de datos de Shell deben definir y documentar las matrices de asociación para permitir que las aplicaciones amplíen el comportamiento de esos tipos, como para registrar verbos u otra información. Las aplicaciones pueden ampliar el comportamiento de los elementos en función de agregar datos a las subclaves de la matriz de asociación, como agregar verbos para elementos.
El origen de datos del sistema de archivos crea una matriz de asociación para archivos basados en las siguientes subclaves del Registro y progID especiales:
Si el archivo tiene un ProgID registrado, se usa HKEY_CLASSES_ROOT\ProgID . De lo contrario , se usa HKEY_CLASSES_ROOT\Desconocido .
La extensión de nombre de archivo se registra en HKEY_CLASSES_ROOT subclave\SystemFileAssociations.fileExtension\.
Los ProgID especiales se muestran en la tabla siguiente.
ProgID especial Descripción HKEY_CLASSES_ROOT\* Todos los archivos (no carpetas) HKEY_CLASSES_ROOT\AllFilesystemObjects Archivos y carpetas del sistema de archivos HKEY_CLASSES_ROOT\Directorio Carpetas del sistema de archivos HKEY_CLASSES_ROOT\Carpeta Contenedores de Shell
Matrices de asociación de orígenes de datos de Shell
En la lista siguiente se representan algunas de las matrices de asociación del almacén de datos de Shell que se pueden usar para los fines descritos en este tema:
- 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
Las matrices de asociación de orígenes de datos de Shell que se pueden usar para DBFolder (un almacén de datos de Shell que representa elementos en los resultados de búsqueda y las vistas basadas en consultas) son los siguientes:
- Unidades
- Red
- RegItems
- Ejemplos:
- ContentView
- Verbos
Otras matrices de asociación comunes incluyen Carpeta e Impresoras.
Recursos adicionales
- Para crear un almacén de datos de Shell, consulte Implementación de las interfaces básicas de objetos de carpeta.
Temas relacionados