Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Annak érdekében, hogy az adatok indexelve és megfelelően jelenjenek meg a felhasználó számára a keresések során, implementálnia kell a Shell-adattárakat (más néven Shell-névtérbővítményeket), valamint a fájltípus-kezelőket (más néven Shell-bővítményeket, bővítménykezelőketvagy Shell-bővítménykezelőket).
Ez a témakör a következő felületeket ismerteti:
Fájltípus-kezelők implementálása
Ezek a Shell-bővítmények vagy fájltípus-kezelők a következő Shell-funkciókat biztosítják a felhasználóknak:
- Az eredménynézet egy adott ikont jelenít meg az elemtípushoz.
- Az eredménynézet az elem előnézetét jeleníti meg, amikor a felhasználó kiválasztja az elemet.
- A felhasználók duplán kattintva eseményeket kezdeményezhetnek, például megnyithatják a fájlt.
- A felhasználók a jobb gombbal az elemekre kattintva elérhetik a helyi (kontextus) menüt.
- A felhasználók húzással helyezhetik el az elemeket.
Az összes com-objektumhoz hasonlóan a fájltípus-kezelőknek is implementálniuk kell egy IUnknown felületet és egy osztály-előállítót.
Windows XP vagy korábbi rendszerekben a kezelőknek a következőket is implementálniuk kell:
Windows Vista rendszerben IPersistFile interface és IShellExtInit Interface a Következő három felület váltotta fel a Shellhez a kezelő inicializálásához:
Az ésszerű felhasználói élmény biztosításához meg kell adnia egy Shell-adattárat a protokollkezelőnek. Ez az adattár ezután az ikonkezelők, a helyi menükezelők, az előnézeti kezelők és így tovább "gyáraként" szolgál. A IPersist Interface és a IPersistFolder Interface minimális implementációit a IShellFolder Interfacemegköveteli, és az IShellFolder Interface minimális implementációjára van szükség az IContextMenu és az IExtractIconesetében.
Jegyzet
Ugyanazt az osztályazonosítót (CLSID) kell implementálni IPersist, IPersistFolder, és IShellFolder.
További információ a Shell-adattár protokollkezelők támogatásához való létrehozásáról: Az alapszintű mappaobjektum-felületek implementálása.
IPersist
Az IPersist felület határozza meg a GetClassID egyetlen metódust, amely egy olyan objektum CLSID-jének megadására szolgál, amely tartósan tárolható a rendszerben.
| Módszer | Leírás |
|---|---|
| GetClassID | A Shell-adattár objektum CLSID azonosítóját adja vissza |
IPersistFolder
Az IPersistFolder felület a Shell-mappaobjektumok inicializálására szolgál. Ennek a felületnek, amely a IPersist-ból származik, az implementálása az, ahogyan a mappa helyét megadják a Rendszerhéj névterében. Ezt a felületet ne használja közvetlenül. A IShellFolder::BindToObject metódus fájlrendszeri implementációja akkor használatos, amikor inicializál egy Shell-mappa objektumot.
| Módszer | Leírás |
|---|---|
| Inicializál | Utasít egy Shell-mappaobjektumot, hogy inicializálja magát az átadott információk alapján, és visszaadja S_OK |
IShellFolder
A IShellFolder interface felület a mappák kezelésére szolgál, és részleges implementációra van szükség, hogy a protokollkezelőhöz implementált ikonok és környezetfelületek megfelelően viselkedjenek a Windows Search találatok felhasználói felületén. A szükséges funkciók többsége a GetUIObjectOf metódus által érhető el. Ezzel a módszerrel egy bővítmény lekérdezheti az IExtractIcon és IContextMenu interfészeket.
Az IShellFolder interface felület URL-címek helyett PIDL-eket használ. A teljes Shell-adattár követelményeivel ellentétben a bővítmények olyan egyszerű IDL-struktúrát használhatnak, amely csak az URL-címet tartalmazza.
Az IShellFolder Interface alábbi módszereit kell implementálnia. Ezen módszerek közül öt minimális implementációt igényel.
| Módszer | Leírás |
|---|---|
| BindToObject | Visszatér E_NOTIMPL |
| BindToStorage | Visszatér E_NOTIMPL |
| CreateViewObject | Visszatér E_NOTIMPL |
| ÁllítsaBeANevét | Visszatér E_NOTIMPL |
| ParseDisplayName | URL-cím konvertálása a PIDL-struktúrára |
| Azonosítók összehasonlítása | Két PIDL-érték összehasonlítása |
| GetDisplayNameOf | A PIDL URL-címét adja vissza |
| GetUIObjectOf | Ez az eljárás hasonló a IUnknown::QueryInterface metódushoz. Ha ikont kér, a hívó az IID_IExtractIcon-t kér; ha helyi menüt kér, a hívó az IID_IContextMenu-t kér. |
IShellFolder nem használható mappák számbavételére. Ez azt jelenti, hogy a mappa megjelenítendő neve a fizikai URL-cím lesz. Ez a jövőben változhat.
IContextMenu
Amikor a Windows Search megjeleníti az eredményeket a felhasználónak, a felhasználó rákattinthat a jobb gombbal egy elemre, és megtekintheti a IContextMenu felület által meghatározott helyi menüt. A gyorsmenüket helyi menüknek is nevezik.
A helyi menü alapértelmezett művelete ugyanaz, mint amikor az elemre duplán kattint. Az elem megfelelő IShellFolder vagy IContextMenu illesztője nélkül a dupla kattintásos esemény alapértelmezett viselkedése az, hogy argumentumként adja át az URL-címet a ShellExecute függvény függvénynek.
A helyi menükezelők létrehozásával kapcsolatos további információkért tekintse meg Helyi menükezelők létrehozása című témakört, és Minta: A protokollkezelők rendszerhéjkiterjesztései a mintakódhoz.
IExtractIcon
IExtractIcon lekéri a Windows Search felhasználói felületének ikonját a protokollkezelő által megadott PIDL URL-cím alapján.
További információkért az ikonkezelők létrehozásáról, lásd a Ikonkezelők létrehozása szakaszt, a mintakódért pedig a Rendszerhéjkiterjesztések protokollkezelőkhöz szakaszt.
IPreviewHandler
Az IPreviewHandler egy kijelölt elem részletes előnézetét jeleníti meg a Windows Intézőben. Az előzetes verziók a Windows Search 4.0-s verziójában, illetve a Windows Vista és a Windows Desktop Search 3.x rendszerben érhetők el.
Egyéni előnézeti kezelő létrehozása:
Implementáljon egy IPreviewHandler-t, amely egy IStream-etfogad, követve a(z) Előnézeti kezelőkre vonatkozó útmutatót.
Regisztrálja be az előnézet kezelőt:
HKEY_CLASSES_ROOT\<Your_Object_Type>HKEY_CLASSES_ROOT\<Your_Object_Type>\ShellExHKEY_CLASSES_ROOT\<Your_Object_Type>\ShellEx\{8895b1c6-b41f-4c1c-a562-0d564250836f} @ = {<Your_PreviewHandler_GUID>}Hajtsa végre az alábbi két lépést egy Shell-mappa url-címhez való implementálásához:
A IShellFolder::GetUIObjectOf metódusesetén kezelje a IQueryAssociations elemet, és adja vissza a társítást a Shell-objektumokhoz, amint az az alábbi kódrészletben látható.
CComPtr<IQueryAssociations> spqa; AssocCreate(CLSID_QueryAssociations, __uuidof(IQueryAssociations), &spqa); spqa->Init(0, L"Your_Object_Type", NULL, NULL); spqa->QueryInterface(riid, ppvReturn);Miután a Shell lekérdezte a Shell-mappát az adatfolyam előnézeti kezelő inicializálásához, lépjen a IShellFolder::BindToObject metódushoz, kezelje az IID_IStream-et, és adjon vissza egy IStream-et az URL-címére.
Ha egy meglévő előzetes verziókezelőt szeretne újra felhasználni a fájltípushoz, kövesse az alábbi két lépést:
- Regisztrálja az előnézeti kezelőt a fájltípushoz a meglévő előnézeti kezelő CLSID-azonosítójának használatával a <Your_PreviewHandler_GUID>helyett.
- Implementáljon egy Shell-mappát.
További információ az előzetes verzió kezelőinek létrehozásáról: IPreviewHandler és Előzetes kezelők.
További erőforrások
- Az indexelési folyamat áttekintését az Az indexelési folyamatcímű cikkben tekintheti meg.
- További információ a kezelők létrehozásáról: Shell-bővítmények regisztrálása, Shell-bővítménykezelők létrehozása, Helyi menü, Shell-névtérbővítmények és előzetes kezelők.
Kapcsolódó témakörök
-
fogalmi
-
Protokollkezelők ismertetése