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ługiwaczy
- wstępnie zdefiniowanych obiektów powłoki
- przykład rejestracji programu obsługi rozszerzeń
- Tematy pokrewne
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}
Tematy pokrewne