Udostępnij za pośrednictwem


Rejestrowanie obsługiwaczy rozszerzeń powłoki

Obiekt programu obsługi rozszerzeń powłoki musi zostać zarejestrowany, zanim powłoka będzie mogła go używać. Temat ten stanowi ogólne omówienie sposobu rejestrowania obsługi rozszerzeń powłoki.

Za każdym razem, gdy tworzysz lub zmieniasz program obsługi rozszerzenia powłoki, ważne jest, aby powiadomić system o wprowadzeniu zmiany. W tym celu należy wywołać SHChangeNotify, określając zdarzenie SHCNE_ASSOCCHANGED. Jeśli nie wywołasz SHChangeNotify, zmiana może nie zostać rozpoznana do momentu ponownego uruchomienia systemu.

Istnieją pewne dodatkowe czynniki, które mają zastosowanie do systemów Windows 2000. Aby uzyskać szczegółowe informacje, zobacz sekcję Registering Shell Extension Handlers on Windows 2000 Systems (Rejestrowanie programów obsługi rozszerzeń powłoki w systemach Windows 2000).

Podobnie jak w przypadku wszystkich obiektów modelu obiektów składników (COM), należy utworzyć identyfikator GUID dla programu obsługi, używając narzędzia takiego jak Guidgen.exe, które jest dostarczane z Windows Software Development Kit (SDK). Utwórz podklucz w obszarze HKEY_CLASSES_ROOT\CLSID, którego nazwa jest formą ciągu tego identyfikatora GUID. Ponieważ programy obsługi rozszerzeń powłoki są serwerami działającymi w procesie, należy również utworzyć podklucz InprocServer32 w podkluczu GUID, z wartością (Domyślna) ustawioną na ścieżkę biblioteki DLL obsługującej. Użyj modelu wątkowania apartamentów. Przykład pokazano tutaj:

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

Za każdym razem, gdy powłoka podejmuje akcję, która może obejmować program obsługi rozszerzenia powłoki, sprawdza odpowiedni podklucz rejestru. Podklucz, w którym program obsługi rozszerzeń jest zarejestrowany, kontroluje, kiedy zostanie wywołany. Na przykład, powszechną praktyką jest wywoływanie obsługi menu skrótów nazywanej, gdy powłoka wyświetla menu skrótów dla elementu typu pliku . W takim przypadku program obsługi musi być zarejestrowany w podkluczu typu pliku ProgID.

W tym temacie omówiono następujące tematy:

Nazwy obsługujących

Aby włączyć obsługę rozszerzenia powłoki, utwórz podklucz z nazwą podklucza programu obsługi (patrz poniżej) w podkluczu ShellEx podklucza ProgID (dla typów plików) lub nazwę typu obiektu powłoki (dla predefined_shell_objects).

Jeśli na przykład chcesz zarejestrować program obsługi rozszerzenia menu skrótów dla programu MyProgram.1, zacznij od utworzenia następującego podklucza:

HKEY_CLASSES_ROOT
   MyProgram.1
      ShellEx
         ContextMenuHandlers

W przypadku następujących procedur obsługi utwórz podklucz poniżej podklucza "Nazwa podklucza obsługi" o nazwie jako wersja ciągu identyfikatora klasy (CLSID) rozszerzenia powłoki. Wiele rozszerzeń można zarejestrować pod nazwą podklucza obsługującego, tworząc wiele podkluczy.

Obsługiwacz Interfejs Nazwa podklucza obsługi
Procedura obsługi dostawcy kolumn IColumnProvider ColumnHandlers
Procedura obsługi menu skrótów IContextMenu ContextMenuHandlers
Procedura obsługi copyhook ICopyHook CopyHookHandlers
Obsługa przeciągania i upuszczania IContextMenu DragDropHandlers
Moduł obsługi arkusza właściwości IShellPropSheetExt Obsługiwacz Formularzy

 

Dla następujących obsług, domyślna wartość klucza "Nazwa podklucza obsługi" jest reprezentacją ciągłą CLSID rozszerzenia powłoki. Dla tych obsługujących można zarejestrować tylko jedno rozszerzenie.

Kontroler Interfejs Nazwa podklucza obsługi
Obsługa danych IDataObject DataHandler
Obsługa przeciągania i upuszczania IDropTarget DropHandler
Obsługiwacz ikon IExtractIconA/W IconHandler
Moduł obsługi obrazów miniatur IThumbnailProvider {E357FCCD-A995-4576-B01F-234630154E96}
Procedura obsługi etykietek informacji IQueryInfo {00021500-0000-0000-C000-000000000046}
Link powłoki (ANSI) IShellLinkA {000214EE-0000-0000-C000-000000000046}
Link powłoki (UNICODE) IShellLinkW {000214F9-0000-0000-C000-000000000046}
Magazyn ustrukturyzowany IStorage {0000000B-0000-0000-C000-000000000046}
Metadane IPropertySetStorage PropertyHandler
Przypnij do menu Start IStartMenuPinnedList {a2a9545d-a0c2-42b4-9708-a0b2badd77c8}
Przypnij do paska zadań {90AA3A4E-1CBA-4233-B8BB-535773D48449}

 

Podklucze określone w celu dodania Przypnij do menu Start i Przypnij do paska zadań do menu skrótów elementu są wymagane tylko w przypadku typów plików, które zawierają IsShortCut.

Wstępnie zdefiniowane obiekty systemowej powłoki

Powłoka definiuje dodatkowe obiekty w HKEY_CLASSES_ROOT, które można rozszerzyć w taki sam sposób, jak typy plików. Aby na przykład dodać procedurę obsługi arkusza właściwości dla wszystkich plików, można zarejestrować się w podkluczu PropertySheetHandlers.

HKEY_CLASSES_ROOT
   *
      shellex
         PropertySheetHandlers

W poniższej tabeli przedstawiono różne podklucze HKEY_CLASSES_ROOT, w których można zarejestrować programy obsługi rozszerzeń. Należy pamiętać, że nie można zarejestrować wielu procedur obsługi rozszerzeń we wszystkich wymienionych podkluczach. Aby uzyskać więcej informacji, zobacz dokumentację obsługującego.

Podklucz Opis Możliwe obsługujące jednostki
* Wszystkie pliki Menu skrótów, arkusz właściwości, czasowniki (patrz poniżej)
WszystkieObiektyPlikówSystemowych Wszystkie pliki i foldery plików Menu skrótów, Arkusz właściwości, Czasowniki
folder Wszystkie foldery Menu skrótów, Arkusz właściwości, Czasowniki
Katalog Foldery plików Menu skrótów, Arkusz właściwości, Czasowniki
Directory\Background Tło folderu plików Tylko menu skrótów
DesktopBackground Tło pulpitu (system Windows 7 lub nowszy) Menu skrótów, czasowniki
dysku Wszystkie dyski w komputerze, takie jak "C:\" Menu skrótów, Arkusz właściwości, Czasowniki
Network Cała sieć (w obszarze Moje miejsca sieciowe) Menu skrótów, Arkusz właściwości, Czasowniki
Network\Type\# Wszystkie obiekty typu # (patrz poniżej) Menu skrótów, Arkusz właściwości, Czasowniki
NetShare Wszystkie udziały sieciowe Menu skrótów, Karta właściwości, Czasowniki
NetServer Wszystkie serwery sieciowe Menu skrótów, Arkusz właściwości, Czasowniki
network_provider_name Wszystkie obiekty udostępniane przez dostawcę sieci "network_provider_name" Menu skrótów, Arkusz właściwości, Czasowniki
drukarki Wszystkie drukarki Menu skrótów, arkusz właściwości
audioCD Audio CD w napędzie CD Tylko czasowniki
DVD Stacja dysków DVD (Windows 2000) Menu skrótów, Arkusz właściwości, Czasowniki

 

Notatki

  • Dostęp do menu skrótów tła folderu plików można uzyskać, klikając prawym przyciskiem myszy w folderze plików, ale nie w żadnej zawartości folderu.
  • "Czasowniki" to specjalne polecenia zarejestrowane w podkluczu HKEY_CLASSES_ROOT\\Shell\Verb.
  • Dla sieci typu\\#, "#" to kod typu dostawcy sieci w systemie dziesiętnym. Kod typu dostawcy sieci jest wysokim słowem typu sieci. Lista typów sieci jest podana w pliku nagłówkowym Winnetwk.h (wartości WNNC_NET_*). Na przykład WNNC_NET_SHIVA jest 0x00330000, więc odpowiedni podklucz typu to HKEY_CLASSES_ROOT\\Typ sieci\51.
  • "network_provider_name" to nazwa dostawcy sieci określona przez WNetGetProviderName, z spacjami przekonwertowanymi na podkreślenia. Jeśli na przykład dostawca sieci Microsoft Networking jest zainstalowany, jego nazwa dostawcy to "Microsoft Windows Network", a odpowiedni network_provider_name jest Microsoft_Windows_Network.

Przykład rejestracji programu obsługi rozszerzeń

Aby włączyć określoną procedurę obsługi, utwórz podklucz typu procedury obsługi rozszerzeń z nazwą procedury obsługi. Powłoka nie używa nazwy programu obsługi, ale musi być inna niż wszystkie inne nazwy w podkluczu tego typu. Ustaw domyślną wartość podklucza nazwy na formę ciągu GUID obsługiwacza.

Poniższy przykład ilustruje wpisy rejestru, które umożliwiają menu skrótów i procedury obsługi rozszerzeń arkusza właściwości przy użyciu przykładowego typu pliku 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}

Inicializacja programów obsługi rozszerzeń powłoki