Sdílet prostřednictvím


Registrace obslužných rutin systémového prostředí rozšíření

Objekt obslužné rutiny rozšíření prostředí musí být zaregistrován dříve, než ho může prostředí použít. Toto téma je obecnou diskuzí o tom, jak zaregistrovat obslužnou rutinu rozšíření prostředí.

Kdykoli vytvoříte nebo změníte obslužnou rutinu Shell rozšíření, je důležité upozornit systém, že jste provedli změnu. Provedete to voláním SHChangeNotifya zadáním události SHCNE_ASSOCCHANGED. Pokud nevoláte SHChangeNotify, změna se nemusí rozpoznat, dokud se systém nerestartuje.

Existují některé další faktory, které platí pro systémy Windows 2000. Podrobnosti najdete v části registrace obslužných rutin rozšíření prostředí v systému Windows 2000 Systems.

Stejně jako u všech objektů modelu COM (Component Object Model) musíte vytvořit identifikátor GUID pro obslužnou rutinu pomocí nástroje, jako je Guidgen.exe, který je k dispozici se sadou Windows Software Development Kit (SDK). Vytvořte podklíč pod HKEY_CLASSES_ROOT\CLSID, jehož název je řetězcová forma tohoto identifikátoru GUID. Protože obslužné rutiny rozšíření Shell jsou in-process servery, musíte také vytvořit pod tímto podklíčem GUID podklíč InprocServer32 s hodnotou (Výchozí) nastavenou na cestu k DLL knihovně obslužné rutiny. Použijte model vláken apartment. Tady je příklad:

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

Kdykoli shell provede akci, která může zahrnovat obslužnou rutinu rozšíření prostředí, zkontroluje příslušný podklíč registru. Podklíč, pod kterým je obslužná rutina rozšíření registrována, určuje, kdy bude volána. Je například běžnou praxí volat obslužnou rutinu místní nabídky, když Shell zobrazí místní nabídku pro člena typ souboru. V tomto případě musí být zpracovatel registrován pod podklíčem typu souboru ProgID.

Toto téma popisuje následující témata:

Názvy obslužných rutin

Pokud chcete povolit obslužnou rutinu rozšíření prostředí, vytvořte podklíč s názvem obslužné rutiny (viz níže) pod podklíčem ShellEx subklíče ProgID (pro typy souborů) nebo názvem typu objektu shellu (pro predefined_shell_objects).

Pokud například chcete zaregistrovat obslužnou rutinu rozšíření místní nabídky pro MyProgram.1, začněte tím, že vytvoříte následující podklíč:

HKEY_CLASSES_ROOT
   MyProgram.1
      ShellEx
         ContextMenuHandlers

Pro následující obslužné rutiny vytvořte podklíč pod hlavním klíčem "Název podklíče obslužné rutiny" s názvem jako textová verze identifikátoru třídy (CLSID) rozšíření prostředí Shell. Pod názvem podklíče obslužného mechanismu lze zaregistrovat několik rozšíření vytvořením více podklíčů.

Zpracovatel Rozhraní Název subklíče obsluhy
Obslužný zpracovatel sloupce IColumnProvider Zpracovatelé sloupců
Obslužná rutina kontextového menu IContextMenu ContextMenuHandlers
Obslužná rutina copyhooku ICopyHook CopyHookHandlers
Obslužný zpracovatel přetažení IContextMenu Zpracovatele přetahování
Obslužná rutina seznamu vlastností IShellPropSheetExt obslužné rutiny PropertySheetHandlers

 

Pro následující obslužné rutiny je výchozí hodnota klíče "Název podklíče obslužné rutiny" textová reprezentace CLSID shellového rozšíření. Pro tyto obslužné rutiny je možné zaregistrovat pouze jedno rozšíření.

Zpracovatel Rozhraní Název podklíče obslužného programu
Zpracovatel dat IDataObject zpracování dat
Obsluha pro vložení IDropTarget Obslužná rutina
Správce ikon IExtractIconA/W obslužné rutiny ikon
Zpracování miniatury obrázku IThumbnailProvider {E357FCCD-A995-4576-B01F-234630154E96}
Zpracovatel infobublin IQueryInfo {00021500-0000-0000-C000-000000000046}
Odkaz Shell (ANSI) IShellLinkA {000214EE-0000-0000-C000-000000000046}
Odkaz prostředí (UNICODE) IShellLinkW {000214F9-0000-0000-C000-000000000046}
Strukturované úložiště IStorage {0000000B-0000-0000-C000-000000000046}
Metadata IPropertySetStorage PropertyHandler
Připnout na nabídku Start IStartMenuPinnedList {a2a9545d-a0c2-42b4-9708-a0b2badd77c8}
Připnout na hlavní panel {90AA3A4E-1CBA-4233-B8BB-535773D48449}

 

Podklíče zadané pro přidání připnutí do nabídky Start a Připnout na hlavní panel místní nabídce položky jsou vyžadovány pouze pro typy souborů, které obsahují položku IsShortCut.

Předdefinované objekty prostředí

Prostředí definuje další objekty v HKEY_CLASSES_ROOT, které lze rozšířit stejným způsobem jako typy souborů. Pokud chcete například přidat obslužné rutiny seznamu vlastností pro všechny soubory, můžete se zaregistrovat v podklíči PropertySheetHandlers.

HKEY_CLASSES_ROOT
   *
      shellex
         PropertySheetHandlers

Následující tabulka obsahuje různé podklíče HKEY_CLASSES_ROOT, pod kterými lze zaregistrovat obslužné rutiny rozšíření. Mějte na paměti, že mnoho rozšíření nelze zaregistrovat ve všech uvedených podklíčích. Další podrobnosti najdete v dokumentaci konkrétní obslužné rutiny.

Podklíč Popis Možné obslužné rutiny
* Všechny soubory Místní nabídka, stránka vlastností, příkazy (viz níže)
AllFileSystemObjects Všechny soubory a složky souborů Kontextová nabídka, Karta vlastností, slovesa
složka Všechny složky Místní nabídka, seznam vlastností, slovesa
adresář Desky na spisy Místní nabídka, seznam vlastností, slovesa
Adresář\Pozadí Pozadí složky souborů Pouze místní nabídka
PozadíPlochy Pozadí plochy (Windows 7 a vyšší) Kontextová nabídka, příkazy
jednotky Všechny jednotky v MyComputeru, například C:\. Kontextová nabídka, karta vlastností, příkazy
Síť Celá síť (v části Místa v síti) Místní nabídka, seznam vlastností, slovesa
síť\Typ\# Všechny objekty typu # (viz níže) Místní nabídka, seznam vlastností, slovesa
NetShare Všechny sdílené složky sítě Místní nabídka, seznam vlastností, slovesa
NetServer Všechny síťové servery Místní nabídka, seznam vlastností, slovesa
název poskytovatele sítě Všechny objekty poskytované poskytovatelem sítě "network_provider_name" Místní nabídka, seznam vlastností, slovesa
tiskárny Všechny tiskárny Místní nabídka, okno vlastností
AudioCD Audio CD v jednotce CD Pouze příkazy
DVD Jednotka DVD (Windows 2000) Místní nabídka, seznam vlastností, slovesa

 

Poznámky

  • K místní nabídce na pozadí složky souborů se dostanete tak, že kliknete pravým tlačítkem myši do složky souborů, ale ne přes obsah složky.
  • Příkazy jsou speciální příkazy registrované v podklíči HKEY_CLASSES_ROOT\\Shell\příkaz.
  • Pro síť Typ\, typ\#, "#" je kód typu poskytovatele sítě v desítkové soustavě. Kód typu poskytovatele sítě je vysoké slovo typu sítě. Seznam typů sítí je uveden v souboru hlaviček Winnetwk.h (hodnoty WNNC_NET_*). Například WNNC_NET_SHIVA je 0x00330000, takže odpovídající podklíč typu by byl HKEY_CLASSES_ROOT\Network\Type\51.
  • "network_provider_name" je název poskytovatele sítě zadaný WNetGetProviderName, s mezerami převedenými na podtržítka. Pokud je například nainstalován zprostředkovatel sítě sítě Microsoft, jeho název je "Microsoft Windows Network" a odpovídající network_provider_name je Microsoft_Windows_Network.

Příklad registrace handleru rozšíření

Chcete-li povolit konkrétní obslužnou rutinu, vytvořte podklíč pod obslužným typem rozšíření s názvem obslužné rutiny. Shell nepoužívá název obslužné rutiny, ale musí se lišit od všech ostatních názvů v podklíči daného typu. Nastavte výchozí hodnotu podklíče 'Název' na řetězcovou formu GUID obslužné rutiny.

Následující příklad znázorňuje položky registru, které umožňují obslužné rutiny místní nabídky a rozšíření listu vlastností pomocí příkladu typu souboru .myp.

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}

inicializace obslužných rutin rozšíření prostředí