Megosztás a következőn keresztül:


Shell-bővítménykezelők regisztrálása

A Shell bővítménykezelő objektumát regisztrálni kell, mielőtt a Shell használni tudja. Ez a témakör a Shell-bővítménykezelő regisztrálásának általános ismertetését ismerteti.

Minden alkalommal, amikor létrehoz vagy módosít egy Shell-bővítménykezelőt, fontos értesíteni a rendszert arról, hogy módosítást hajtott végre. Ehhez hívja meg SHChangeNotify, és adja meg a SHCNE_ASSOCCHANGED eseményt. Ha nem hívja meg SHChangeNotify, előfordulhat, hogy a rendszer újraindításáig a rendszer nem ismeri fel a módosítást.

A Windows 2000 rendszerekre további tényezők vonatkoznak. Részletekért lásd a(z) Shell-bővítménykezelők regisztrálása Windows 2000 rendszereken szakaszt.

Mint minden COM-objektum esetében, a kezelőhöz is létre kell hoznia egy GUID azonosítót egy olyan eszközzel, mint a Guidgen.exe, amelyet a Windows Software Development Kit (SDK) biztosít. Hozzon létre egy alkulcsot HKEY_CLASSES_ROOT\CLSID alatt, amelynek a neve az adott GUID szöveges formája. Mivel a Shell-bővítménykezelők folyamaton belüli kiszolgálók, a GUID alkulcs alatt létre kell hoznia egy InprocServer32 alkulcsot is, amelynek (alapértelmezett) értéke a kezelő DLL-jének elérési útja. Használja az apartman szálkezelési modellt. Itt látható egy példa:

HKEY_CLASSES_ROOT
   CLSID
      {00021500-0000-0000-C000-000000000046}
         InprocServer32
            (Default) = %windir%\System32\Example.dll
            ThreadingModel = Apartment

Amikor a Shell olyan műveletet hajt végre, amely magában foglal egy Shell-bővítménykezelőt, ellenőrzi a beállításjegyzék megfelelő alkulcsát. Az alkulcs, amely alatt a bővítménykezelő regisztrálva van, határozza meg, mikor kerül meghívásra. Például általános gyakorlat, hogy egy gyorsmenükezelőt hívunk meg, amikor a Shell megjelenít egy helyi menüt egy fájltípusú tag számára. Ebben az esetben a kezelőt a fájltípus ProgID alkulcsában kell regisztrálni.

Ez a témakör a következő témákat ismerteti:

Kezelők nevei

A Shell-kiterjesztés kezelő engedélyezéséhez hozzon létre egy alkulcsot a kezelő nevével a ShellEx alkulcs alatt, akár a ProgID (fájltípusok esetén), akár a Shell-objektumtípus neve (predefined_shell_objects) alatt.

Ha például egy helyi menükiterjesztés-kezelőt szeretne regisztrálni a MyProgram.1-hez, először hozza létre a következő alkulcsot:

HKEY_CLASSES_ROOT
   MyProgram.1
      ShellEx
         ContextMenuHandlers

A következő kezelők esetén hozzon létre egy alkulcsot a "Kezelő alkulcs neve" megnevezésű alkulcs alatt, amely a Shell-bővítmény osztályazonosítójának (CLSID) sztringverziója. Több bővítmény regisztrálható a kezelő alkulcsának neve alatt több alkulcs létrehozásával.

Kezelő Interfész Kezelő alkulcsának neve
Oszlopszolgáltató kezelője IColumnProvider Oszlopkezelők
Gyorsmenü kezelő IContextMenu ContextMenüKezelők
Copyhook kezelő ICopyHook CopyHookHandlers
Húzás és ejtés kezelő IContextMenu DragDropHandlers
Tulajdonságlap-kezelő IShellPropSheetExt PropertySheetHandlers

 

A következő kezelők esetében a "Kezelő alkulcsának neve" kulcs alapértelmezett értéke a Shell-bővítmény CLSID-azonosítójának sztringverziója. Ezekhez a kezelőkhöz csak egy bővítmény regisztrálható.

Kezelő Interfész Kezelő alkulcsának neve
Adatkezelő IDataObject DataHandler
Eldobási kezelő IDropTarget DropHandler
Ikonkezelő IExtractIconA/W IconHandler
Miniatűr képkezelő IThumbnailProvider {E357FCCD-A995-4576-B01F-234630154E96}
Infotip kezelő IQueryInfo {00021500-0000-0000-C000-0000000046}
Parancsértelmező hivatkozás (ANSI) IShellLinkA {000214EE-0000-0000-C000-000000000046}
Shell-hivatkozás (UNICODE) IShellLinkW {000214F9-0000-0000-C000-000000000046}
Strukturált tárolás IStorage {0000000B-0000-0000-C000-000000000046}
Metaadatok IPropertySetStorage PropertyHandler
Rögzítés a Start menübe IStartMenüRögzítettLista {a2a9545d-a0c2-42b4-9708-a0b2badd77c8}
Rögzítés a tálcán {90AA3A4E-1CBA-4233-B8BB-535773D48449}

 

Az Rögzítés a Start menübe és a Rögzítés a tálcára opciók elemek helyi menüjébe való rögzítéshez szükséges alkulcsok csak azokhoz a fájltípusokhoz szükségesek, amelyek tartalmazzák az IsShortCut bejegyzést.

Előre definiált rendszerhéjobjektumok

A Shell további objektumokat határoz meg a HKEY_CLASSES_ROOT alatt, amelyek ugyanúgy bővíthetők, mint a fájltípusok. Ha például minden fájlhoz hozzá szeretne adni egy tulajdonságlapkezelőt, regisztrálhat a PropertySheetHandlers alkulcs alatt.

HKEY_CLASSES_ROOT
   *
      shellex
         PropertySheetHandlers

Az alábbi táblázat a HKEY_CLASSES_ROOT különböző alkulcsait tartalmazza, amelyek alatt a bővítménykezelők regisztrálhatók. Vegye figyelembe, hogy számos bővítménykezelő nem regisztrálható az összes felsorolt alkulcs alatt. További részletekért tekintse meg az adott kezelő dokumentációját.

Alkulcs Leírás Lehetséges kezelők
* Minden fájl Gyorsmenü, tulajdonságlap, parancsok (lásd alább)
ÖsszesFájlrendszerObjektum Minden fájl és fájlmappák Helyi menü, tulajdonságlap, igék
mappa Minden mappa Helyi menü, tulajdonságlap, igék
Címtár Fájlmappák Helyi menü, tulajdonságok lapja, igék
Címtár\Háttér Fájlmappa háttere Helyi menü csak
DesktopBackground Asztali háttér (Windows 7 vagy újabb) Gyorsmenü, igék
Meghajtó A MyComputer összes meghajtója, például a "C:\" Helyi menü, tulajdonságpanel, parancsok
hálózat Teljes hálózat (a Saját hálózati helyek alatt) Helyi menü, tulajdonságlap, igék
Network\Type\# Minden# típusú objektum (lásd alább) Helyi menü, tulajdonságlap, igék
NetShare Minden hálózati megosztás Gyorsmenü, tulajdonságlap, igék
NetServer Minden hálózati kiszolgáló Gyorsmenü, tulajdonságpanel, ige
hálózat szolgáltató neve A hálózati szolgáltató által biztosított összes objektum : "network_provider_name" Helyi menü, tulajdonságlap, igék
nyomtatók Minden nyomtató Helyi menü, tulajdonságlap
AudioCD Hang CD CD-meghajtón Csak igék
DVD DVD-meghajtó (Windows 2000) Gyorsmenü, Tulajdonságpanel, Műveletek

 

Jegyzetek

  • A fájlmappa háttérmenüjét úgy érheti el, hogy a jobb gombbal kattint egy fájlmappában, de nem a mappa tartalmának egyikére sem.
  • Az "Igék" az HKEY_CLASSES_ROOT\Alkulcs\Shell\Verbalatt regisztrált speciális parancsok.
  • A Hálózati\Típus\#esetén a "#" egy hálózati szolgáltató típuskódja decimálisan. A hálózati szolgáltató típuskódja egy hálózati típus magas szava. A hálózattípusok listáját a Winnetwk.h fejlécfájl tartalmazza (WNNC_NET_* értékek). Például a WNNC_NET_SHIVA 0x00330000, így a megfelelő típus alkulcsa HKEY_CLASSES_ROOT\Hálózat\Típus\51.
  • A "network_provider_name" a WNetGetProviderNameáltal megadott hálózati szolgáltatónév, a szóközöket aláhúzásjelekké alakítva. Ha például a Microsoft hálózati szolgáltató telepítve van, a szolgáltató neve "Microsoft Windows Network", a megfelelő network_provider_name pedig Microsoft_Windows_Network.

Példa a bővítménykezelő regisztrációjára

Egy adott kezelő engedélyezéséhez hozzon létre egy alkulcsot a bővítménykezelő típusú alkulcs alatt a kezelő nevével. A Shell (Felhasználói felület) nem használja a kezelő nevét, de az adott alkulcs típus alatt lévő összes többi névtől eltérőnek kell lennie. Állítsa be a név alkulcsának alapértelmezett értékét a kezelő GUID-azonosítójának sztring formájára.

Az alábbi példa a helyi menüt és a tulajdonságlapkiterjesztés-kezelőket engedélyező beállításjegyzék-bejegyzéseket mutatja be egy példa .myp fájltípus használatával.

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
   CLSID
      {00000000-1111-2222-3333-444444444444}
         InProcServer32
            (Default) = C:\MyDir\MyCommand.dll
            ThreadingModel = Apartment
      {11111111-2222-3333-4444-555555555555}
         InProcServer32
            (Default) = C:\MyDir\MyPropSheet.dll
            ThreadingModel = Apartment
   MyProgram.1
      (Default) = MyProgram Application
      Shellex
         ContextMenuHandler
            MyCommand
               (Default) = {00000000-1111-2222-3333-444444444444}
         PropertySheetHandlers
            MyPropSheet
               (Default) = {11111111-2222-3333-4444-555555555555}

Shell-bővítménykezelők inicializálása