Associationsmatriser
En associationsmatris är en ordnad lista över registerplatser som används för att lagra information om en objekttyp, inklusive hanterare, verb och andra attribut som ikonen och visningsnamnet för typen. Shell använder associationsmatriser för att fråga en fördefinierad uppsättning registerplatser som kan innehålla information om ett Shell-objekt.
Det här avsnittet är ordnat på följande sätt:
- Om associationmatriser
- Fråga association matriser
- Arbeta med associationsmatriser för en viss shell-datakälla
- ytterligare resurser
- Relaterade ämnen
Om associationsmatriser
En associationsmatris är en ordnad lista över registerplatser som innehåller information om en objekttyp, inklusive hanterare, verb och andra attribut, till exempel ikonen och visningsnamnet för typen. Den här informationen om objekttypen kan registreras på varierande specificitetsnivåer. Du kan till exempel registrera ett verb som bara visas för en viss filtyp (till exempel .jpg), eller för alla objekt med samma System.Kind (till exempel System.kind = bild) eller för alla objekt.
Shell använder associationsmatriser för att fråga en fördefinierad uppsättning registerplatser som potentiellt kan innehålla information om objektet. API:erna för associationsmatrisen kan användas för att hämta ett enda värde från registerundernyckeln som innehåller den begärda informationen, med det värdet som kommer från den första posten i matrisen som tillhandahåller den. Standardikonvärdet hämtas till exempel på det här sättet. Association-matrisen kan också användas för att hämta en uppsättning värden som lagras i registerundernycklarna. Till exempel skapas listan över verb från de verb som är registrerade under alla undernycklar.
När Shell har frågat en fördefinierad uppsättning registerplatser för information om ett Shell-objekt placeras registerplatserna i en matris i ordning från den mest specifika platsen till den mest allmänna.
Eftersom associationsmatriser är ordnade listor ger de programutvecklare en mekanism för att lägga till information i registret som returneras för en viss typ av objekt. På samma sätt tillåter associationsmatriser programutvecklare att lägga till information i registret för en specifik grupp med objekt när dessa objekt registreras på en mer allmän plats. Den här logiken informerar ditt beslut om den lämpligaste platsen i registret för att lagra information om Shell-objekt.
I ett Standard-Windows-system har en .jpg fil följande associationsmatris:
- HKEY_CLASSES_ROOT\jpgfile
- HKEY_CLASSES_ROOT\SystemFileAssociations\.jpg
- HKEY_CLASSES_ROOT\bild
- HKEY_CLASSES_ROOT\*
- HKEY_CLASSES_ROOT\AllFilesystemObjects
Information om hur du registrerar associationsmatriser finns i Application Registration.
Fråga associationsmatriser
Det finns Shell-API:er för att hämta information från en rad registerundernycklar, från den mest specifika registerundernyckeln till en supermängd av informationen i alla registerundernycklar.
Den vanligaste användningen av en associationsmatris är att fråga efter ett enda värde som shell returnerar från det mest specifika elementet i matrisen som har den begärda informationen. I följande kodexempel visas hur du gör det.
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();
}
Följande API:er kan användas för att fråga en associationsmatris eller för att konstruera en associationsmatris IQueryAssociations objekt som kan efterfrågas:
- AssocSkapa (före Windows Vista)
- AssocCreateForClasses
- AssocQueryString
Arbeta med associationsmatriser för en viss shell-datakälla
Varje Shell-datakälla definierar associationsmatrisen för dess objekt. Att definiera en associationsmatris är vanligtvis en funktion av typen av objekt. Shell-datakällsimplementerare bör definiera och dokumentera associationsmatriserna så att program kan utöka beteendet för dessa typer, till exempel för att registrera verb eller annan information. Program kan utöka beteendet för objekt baserat på att lägga till data i undernycklarna för associationsmatrisen, till exempel att lägga till verb för objekt.
Datakällan för filsystemet skapar en associationsmatris för filer baserat på följande registerundernycklar och särskilda ProgID:ar:
Om filen har ett registrerat ProgID används HKEY_CLASSES_ROOT\ProgID-. Annars används HKEY_CLASSES_ROOT\Okänd.
Filnamnstillägget registreras under HKEY_CLASSES_ROOT\SystemFileAssociations\.fileExtension undernyckel.
Särskilda progID:er visas i följande tabell.
Särskilt progID Beskrivning HKEY_CLASSES_ROOT\* Alla filer (icke-mappar) HKEY_CLASSES_ROOT\AllFilesystemObjects Filer och filsystemmappar HKEY_CLASSES_ROOT\Directory Filsystemmappar HKEY_CLASSES_ROOT\mapp Shell-containrar
Shell-datakällassociationmatriser
Följande lista representerar några av de gränssnittsmatriser för datalagerassociationer som kan användas för de syften som beskrivs i det här avsnittet:
- HKEY_CLASSES_ROOT\*
- HKEY_CLASSES_ROOT\AllFilesystemObjects
- HKEY_CLASSES_ROOT\Kind.Document
- HKEY_CLASSES_ROOT\resultat
- HKEY_CLASSES_ROOT\SystemFileAssociations\.docx
- HKEY_CLASSES_ROOT\Word.Document.12
Gränssnittsdatakällans associationsmatriser som kan användas för DBFolder (ett Shell-datalager som representerar objekt i sökresultat och frågebaserade vyer) är följande:
- Enheter
- Nätverk
- RegItems
- Exempel:
- ContentView
- Verb
Andra vanliga associationsmatriser är Mapp och Skrivare.
Ytterligare resurser
- Information om hur du skapar ett Shell-datalager finns i Implementera grundläggande mappobjektgränssnitt.
Relaterade ämnen