Skapa ikonhanterare
En filtyp ofta har en anpassad ikon associerad med den, för att göra dess medlemmar lätt igenkännliga i Utforskaren. Det enklaste sättet att tilldela en anpassad ikon till en filtyp är att registrera ikonens fil. En ikon som är registrerad på det här sättet är dock densamma för alla medlemmar av filtypen. Du kan ha mycket mer flexibilitet när du tilldelar ikoner till medlemmar i filtypen genom att implementera en ikonhanterare.
En ikonhanterare är en typ av Gränssnittstilläggshanterare som gör att du dynamiskt kan tilldela ikoner till medlemmar av en filtyp. Varje gång en fil av typen visas frågar Shell hanteraren efter lämplig ikon. En ikonhanterare kan till exempel tilldela olika ikoner till olika medlemmar av filtypen eller variera ikonen baserat på filens aktuella tillstånd.
De allmänna procedurerna för att implementera och registrera en Shell-tilläggshanterare beskrivs i Skapa gränssnittstilläggshanterare. Det här dokumentet fokuserar på de aspekter av implementeringen som är specifika för ikonhanterare.
- Implementera Ikonhanterare
- Implementera IExtractIcon-gränssnittet
- Registrera ikonhanterare
- Relaterade ämnen
Instruktioner
Steg 1: Implementera ikonhanterare
Precis som alla Gränssnittstilläggshanterare är ikonhanterare com-objekt (Komponentobjektmodell) som implementeras som DLL:er. De måste exportera två gränssnitt utöver IUnknown: IPersistFile och IExtractIcon.
Shell initierar hanteraren via dess IPersistFile- gränssnitt. Det använder det här gränssnittet för att begära hanterarens klassidentifierare (CLSID) och ger den filens namn. Resten av åtgärden sker via gränssnittet IExtractIcon. En allmän diskussion om hur du implementerar Shell-tilläggshanterare, inklusive gränssnittet IPersistFile finns i Skapa gränssnittstilläggshanterare. Resten av det här dokumentet beskriver hur du implementerar gränssnittet IExtractIcon.
Steg 2: Implementera IExtractIcon-gränssnittet
När gränssnittet har initierats använder Shell hanterarens IExtractIcon--gränssnitt för att begära lämplig ikon. Gränssnittet har två metoder: IExtractIcon::GetIconLocation och IExtractIcon::Extract.
Ikoner identifieras av deras plats i filsystemet. Metoden IExtractIcon::GetIconLocation anropas för att begära den här informationen. Ange parametern szIconFile till filnamnet. Om det finns mer än en ikon i filen anger du piIndex till ikonens index. Tilldela lämpliga värden till de två flaggvariablerna. Om du inte vill ange ett filnamn, eller om du inte vill att shell ska extrahera ikonen, anger du flaggan GIL_NOTFILENAME i pwFlags parameter. Du behöver inte tilldela ett värde till szIconFile, men hanteraren måste ange ikonhandtag när Shell anropar IExtractIcon::Extract.
Om du returnerar ett filnamn försöker Shell normalt läsa in ikonen från dess cacheminne. Om du vill förhindra inläsning av en cachelagrad ikon anger du flaggan GIL_DONTCACHE i parametern pwFlags. Om en cachelagrad ikon inte läses in, anropar Shell därefter IExtractIcon::Extract för att hämta handtaget till ikonen.
Om en fil och ett index har angetts av IExtractIcon::GetIconLocationskickas de till IExtractIcon::Extract i pszFile respektive nIconIndex parametrar. Om ett filnamn anges kan hanteraren returnera S_FALSE för att låta Shell extrahera ikonen. Annars måste hanteraren extrahera eller på annat sätt skapa stora och små ikoner och tilldela dessa HICON-referenser till phiconLarge och phiconSmall parametrar. Shell lägger till ikonerna i cacheminnet för att påskynda efterföljande anrop till hanteraren.
Steg 3: Registrera ikonhanterare
När du statiskt registrera en ikon för en filtypskapar du en DefaultIcon- undernyckeln ProgID för filtypen. Standardvärdet är inställt på filen som innehåller ikonen. Om du vill registrera en ikonhanterare måste du fortfarande ha DefaultIcon undernyckel, men standardvärdet måste vara inställt på "%1". Lägg till en IconHandler undernyckel till Shellex undernyckel för ProgID-undernyckeln och ange dess standardvärde till strängformen för hanterarens CLSID GUID. En allmän diskussion om hur du registrerar Shell-tilläggshanterare finns i Skapa gränssnittstilläggshanterare.
I följande exempel ändras registerposten från Anpassa ikoner så att .myp-filtypen nu använder en snabbmenyhanterare i stället för en statiskt definierad ikon.
HKEY_CLASSES_ROOT
.myp
(Default) = MyProgram.1
MyProgram.1
(Default) = MyProgram Application
DefaultIcon
(Default) = %1
Shellex
IconHandler
(Default) = {The handler's CLSID GUID}
Relaterade ämnen