Matrici di associazione

Una matrice di associazione è un elenco ordinato di posizioni del Registro di sistema usate per archiviare informazioni su un tipo di elemento, inclusi gestori, verbi e altri attributi come l'icona e il nome visualizzato del tipo. Shell usa matrici di associazione per eseguire query su un set predefinito di posizioni del Registro di sistema che potrebbero contenere informazioni su un elemento shell.

Questo argomento è organizzato come segue:

Informazioni sulle matrici di associazione

Una matrice di associazione è un elenco ordinato di posizioni del Registro di sistema che contengono informazioni su un tipo di elemento, inclusi gestori, verbi e altri attributi, ad esempio l'icona e il nome visualizzato del tipo. Queste informazioni sul tipo di elemento possono essere registrate a diversi livelli di specificità. Ad esempio, è possibile registrare un verbo che verrà visualizzato solo per un tipo di file specifico (ad esempio .jpg) o per tutti gli elementi con lo stesso System.Kind (ad esempio System.kind = immagine) o per tutti gli elementi.

Shell usa matrici di associazione per eseguire query su un set predefinito di posizioni del Registro di sistema che potrebbero potenzialmente contenere informazioni sull'elemento. Le API della matrice di associazione possono essere usate per recuperare dalla sottochiave del Registro di sistema un singolo valore contenente le informazioni richieste, con tale valore proveniente dalla prima voce della matrice che lo fornisce. Ad esempio, il valore dell'icona predefinito viene recuperato in questo modo. La matrice di associazione può essere usata anche per recuperare un set di valori archiviati nelle sottochiavi del Registro di sistema. Ad esempio, l'elenco dei verbi viene compilato da tali verbi registrati in tutte le sottochiavi.

Dopo che shell esegue una query su un set predefinito di posizioni del Registro di sistema per informazioni su un elemento shell, inserisce le posizioni del Registro di sistema in una matrice in ordine dalla posizione più specifica al più generale.

Poiché le matrici di associazione sono elenchi ordinati, forniscono agli sviluppatori di applicazioni un meccanismo per l'aggiunta di informazioni al Registro di sistema che verrà restituito per un tipo specifico di elemento. Analogamente, le matrici di associazione consentono agli sviluppatori di applicazioni di aggiungere informazioni al Registro di sistema per un gruppo specifico di elementi quando tali elementi vengono registrati in una posizione più generale. Questa logica informa la decisione sulla posizione più appropriata nel Registro di sistema per archiviare informazioni sugli elementi di Shell.

In un sistema Windows predefinito un file di .jpg ha la matrice di associazione seguente:

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

Per informazioni sulla registrazione di matrici di associazione, vedere Registrazione dell'applicazione.

Esecuzione di query su matrici di associazione

Sono disponibili API shell per recuperare informazioni da un intervallo di sottochiavi del Registro di sistema, dalla sottochiave del Registro di sistema più specifica a un superset delle informazioni in tutte le sottochiavi del Registro di sistema.

L'uso più comune di una matrice di associazioni consiste nell'eseguire una query per un singolo valore restituito da Shell dall'elemento più specifico della matrice con le informazioni richieste. Nell'esempio di codice seguente viene illustrato come eseguire questa operazione.

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

Le API seguenti possono essere usate per eseguire query su una matrice di associazione o per costruire un oggetto IQueryAssociations della matrice di associazione che può essere sottoposto a query:

Uso di matrici di associazione per un'origine dati di Shell specifica

Ogni origine dati shell definisce la matrice di associazione per gli elementi. La definizione di una matrice di associazione è in genere una funzione del tipo di elemento. Gli implementatori dell'origine dati shell devono definire e documentare le matrici di associazione per consentire alle applicazioni di estendere il comportamento di tali tipi, ad esempio per registrare verbi o altre informazioni. Le applicazioni possono estendere il comportamento degli elementi in base all'aggiunta di dati alle sottochiave della matrice di associazione, ad esempio l'aggiunta di verbi per gli elementi.

L'origine dati del file system compila una matrice di associazione per i file in base alle seguenti sottochiave del Registro di sistema e ai progID speciali:

  • Se il file ha un ProgID registrato, viene usato HKEY_CLASSES_ROOT\ProgID . In caso contrario , viene usato HKEY_CLASSES_ROOT\Sconosciuto .

  • L'estensione del nome file è registrata in HKEY_CLASSES_ROOT\ sottochiaveSystemFileAssociations.fileExtension\.

  • I ProgID speciali sono visualizzati nella tabella seguente.

    ProgID speciale Descrizione
    HKEY_CLASSES_ROOT\* Tutti i file (non cartelle)
    HKEY_CLASSES_ROOT\AllFilesystemObjects Cartelle file e file system
    HKEY_CLASSES_ROOT\Directory Cartelle del file system
    HKEY_CLASSES_ROOT\Cartella Contenitori shell

     

Matrici di associazioni di origine dati shell

L'elenco seguente rappresenta alcune matrici di associazione dell'archivio dati shell che possono essere usate ai fini descritti in questo argomento:

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

Le matrici di associazione dell'origine dati shell che possono essere usate per DBFolder (un archivio dati shell che rappresenta gli elementi nei risultati della ricerca e nelle visualizzazioni basate su query) sono i seguenti:

  • Unità
  • Rete
  • RegItems
  • Esempi:
    • ContentView
    • Verbi

Altre matrici di associazioni comuni includono Cartelle e stampanti.

Risorse aggiuntive

Registrazione dell'applicazione

Tipi di file

Funzionamento delle associazioni di file

Visualizzazione contenuto per tipo di file o tipo

Verifica dei tipi di file

Gestori di tipi di file

Identificatori di codice

Tipi percepiti