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
- předdefinovaných objektů prostředí
- Příklad registrace obslužné rutiny pro rozšíření
- souvisejí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}
Související témata