Registrieren von Shellerweiterungshandlern
Ein Shell-Erweiterungshandlerobjekt muss registriert werden, bevor es von der Shell verwendet werden kann. In diesem Thema wird allgemein erläutert, wie Sie einen Shell-Erweiterungshandler registrieren.
Jedes Mal, wenn Sie einen Shell-Erweiterungshandler erstellen oder ändern, ist es wichtig, das System darüber zu informieren, dass Sie eine Änderung vorgenommen haben. Rufen Sie dazu SHChangeNotify auf, und geben Sie das SHCNE_ASSOCCHANGED-Ereignis an. Wenn Sie SHChangeNotify nicht aufrufen, wird die Änderung möglicherweise erst erkannt, wenn das System neu gestartet wird.
Es gibt einige zusätzliche Faktoren, die für Windows 2000-Systeme gelten. Ausführliche Informationen finden Sie im Abschnitt Registrieren von Shell-Erweiterungshandlern unter Windows 2000-Systemen .
Wie bei allen COM-Objekten (Component Object Model) müssen Sie eine GUID für den Handler mithilfe eines Tools wie Guidgen.exe erstellen, das mit dem Windows Software Development Kit (SDK) bereitgestellt wird. Erstellen Sie einen Unterschlüssel unter HKEY_CLASSES_ROOT\CLSID , dessen Name die Zeichenfolgenform dieser GUID ist. Da es sich bei Shell-Erweiterungshandlern um Prozessserver handelt, müssen Sie auch einen InprocServer32-Unterschlüssel unter diesem GUID-Unterschlüssel erstellen, dessen Wert (Standard) auf den Pfad der DLL des Handlers festgelegt ist. Verwenden Sie das Apartmentthreadingmodell. Das folgende Beispiel soll dies erläutern:
HKEY_CLASSES_ROOT
CLSID
{00021500-0000-0000-C000-000000000046}
InprocServer32
(Default) = %windir%\System32\Example.dll
ThreadingModel = Apartment
Jedes Mal, wenn die Shell eine Aktion ausführt, die einen Shell-Erweiterungshandler umfassen kann, überprüft sie den entsprechenden Registrierungsunterschlüssel. Der Unterschlüssel, unter dem ein Erweiterungshandler registriert ist, steuert, wenn er aufgerufen wird. Für instance ist es üblich, einen Kontextmenühandler namens zu verwenden, wenn die Shell ein Kontextmenü für ein Element eines Dateityps anzeigt. In diesem Fall muss der Handler unter dem ProgID-Unterschlüssel des Dateityps registriert werden.
In diesem Thema werden die folgenden Themen behandelt:
- Handlernamen
- Vordefinierte Shellobjekte
- Beispiel für eine Erweiterungshandlerregistrierung
- Zugehörige Themen
Handlernamen
Um einen Shell-Erweiterungshandler zu aktivieren, erstellen Sie einen Unterschlüssel mit dem Unterschlüsselnamen des Handlers (siehe unten) unter dem ShellEx-Unterschlüssel der ProgID (für Dateitypen) oder des Shell-Objekttypnamens (für predefined_shell_objects).
Wenn Sie beispielsweise einen Kontextmenüerweiterungshandler für MyProgram.1 registrieren möchten, erstellen Sie zunächst den folgenden Unterschlüssel:
HKEY_CLASSES_ROOT
MyProgram.1
ShellEx
ContextMenuHandlers
Erstellen Sie für die folgenden Handler einen Unterschlüssel unter dem Unterschlüssel "Handler-Unterschlüsselname", der als Zeichenfolgenversion des Klassenbezeichners (CLSID) der Shell-Erweiterung benannt ist. Mehrere Erweiterungen können unter dem Unterschlüsselnamen des Handlers registriert werden, indem mehrere Unterschlüssel erstellt werden.
Handler | Schnittstelle | Name des Unterschlüssels des Handlers |
---|---|---|
Spaltenanbieterhandler | IColumnProvider | ColumnHandler |
Kontextmenühandler | IContextMenu | ContextMenuHandlers |
Copyhook-Handler | ICopyHook | CopyHookHandler |
Drag & Drop-Handler | IContextMenu | DragDropHandler |
Eigenschaftenblatthandler | IShellPropSheetExt | PropertySheetHandlers |
Für die folgenden Handler ist der Standardwert des Schlüssels "Handlerunterschlüsselname" die Zeichenfolgenversion der CLSID der Shell-Erweiterung. Für diese Handler kann nur eine Erweiterung registriert werden.
Handler | Schnittstelle | Name des Unterschlüssels des Handlers |
---|---|---|
Datenhandler | Idataobject | Datahandler |
Drop-Handler | Idroptarget | DropHandler |
Symbolhandler | IExtractIconA/W | IconHandler |
Miniaturbildhandler | IThumbnailProvider | {E357FCCD-A995-4576-B01F-234630154E96} |
QuickInfo-Handler | IQueryInfo | {00021500-0000-0000-C000-00000000046} |
Shelllink (ANSI) | IShellLinkA | {000214EE-0000-0000-C000-00000000046} |
Shelllink (UNICODE) | IShellLinkW | {000214F9-0000-0000-C000-000000000046} |
Strukturierter Speicher | IStorage | {00000000B-0000-0000-C000-00000000046} |
Metadaten | IPropertySetStorage | PropertyHandler |
An das Startmenü anheften | IStartMenuPinnedList | {a2a9545d-a0c2-42b4-9708-a0b2badd77c8} |
An Taskleiste anheften | {90AA3A4E-1CBA-4233-B8BB-535773D4849} |
Die angegebenen Unterschlüssel zum Hinzufügen von An das Startmenü anheften und an Taskleiste an das Kontextmenü eines Elements anheften sind nur für Dateitypen erforderlich, die den Eintrag IsShortCut enthalten.
Vordefinierte Shellobjekte
Die Shell definiert zusätzliche Objekte unter HKEY_CLASSES_ROOT die auf die gleiche Weise wie Dateitypen erweitert werden können. Um beispielsweise einen Eigenschaftenblatthandler für alle Dateien hinzuzufügen, können Sie sich unter dem Unterschlüssel PropertySheetHandlers registrieren.
HKEY_CLASSES_ROOT
*
shellex
PropertySheetHandlers
Die folgende Tabelle enthält die verschiedenen Unterschlüssel von HKEY_CLASSES_ROOT , unter denen Erweiterungshandler registriert werden können. Beachten Sie, dass viele Erweiterungshandler nicht unter allen aufgeführten Unterschlüsseln registriert werden können. Weitere Informationen finden Sie in der Dokumentation des jeweiligen Handlers.
Unterschlüssel | BESCHREIBUNG | Mögliche Handler |
---|---|---|
* | Alle Dateien | Kontextmenü, Eigenschaftenblatt, Verben (siehe unten) |
AllFileSystemObjects | Alle Dateien und Dateiordner | Kontextmenü, Eigenschaftenblatt, Verben |
Ordner | Alle Ordner | Kontextmenü, Eigenschaftenblatt, Verben |
Verzeichnis | Dateiordner | Kontextmenü, Eigenschaftenblatt, Verben |
Verzeichnis\Hintergrund | Hintergrund des Dateiordners | Nur Kontextmenü |
DesktopBackground | Desktophintergrund (Windows 7 und höher) | Kontextmenü, Verben |
Laufwerk | Alle Laufwerke in MyComputer, z. B. "C:\" | Kontextmenü, Eigenschaftenblatt, Verben |
Network | Gesamtes Netzwerk (unter Meine Netzwerkplätze) | Kontextmenü, Eigenschaftenblatt, Verben |
Netzwerk\Typ\ # | Alle Objekte vom Typ # (siehe unten) | Kontextmenü, Eigenschaftenblatt, Verben |
Netshare | Alle Netzwerkfreigaben | Kontextmenü, Eigenschaftenblatt, Verben |
NetServer | Alle Netzwerkserver | Kontextmenü, Eigenschaftenblatt, Verben |
network_provider_name | Alle vom Netzwerkanbieter "network_provider_name" bereitgestellten Objekte | Kontextmenü, Eigenschaftenblatt, Verben |
Drucker | Alle Drucker | Kontextmenü, Eigenschaftenblatt |
Audiocd | Audio-CD im CD-Laufwerk | Nur Verben |
DVD | DVD-Laufwerk (Windows 2000) | Kontextmenü, Eigenschaftenblatt, Verben |
Hinweise
- Auf das Kontextmenü im Hintergrund des Dateiordners wird zugegriffen, indem sie mit der rechten Maustaste in einem Dateiordner, aber nicht über den Inhalt des Ordners klicken.
- "Verben" sind spezielle Befehle, die unter HKEY_CLASSES_ROOT\Unterschlüssel-Shellverb\\ registriert sind.
- Für Netzwerktyp\\# ist "#" ein Netzwerkanbietertypcode in dezimal. Der Netzwerkanbietertypcode ist das hohe Wort eines Netzwerktyps. Die Liste der Netzwerktypen wird in der Winnetwk.h-Headerdatei (WNNC_NET_*-Werte) angegeben. Beispielsweise ist WNNC_NET_SHIVA 0x00330000, sodass der entsprechende Typunterschlüssel HKEY_CLASSES_ROOT\Netzwerktyp\\51 lautet.
- "network_provider_name" ist ein Netzwerkanbietername, der von WNetGetProviderName angegeben wird, wobei die Leerzeichen in Unterstriche konvertiert werden. Wenn beispielsweise der Microsoft-Netzwerkanbieter installiert ist, lautet sein Anbietername "Microsoft Windows-Netzwerk", und der entsprechende network_provider_name ist Microsoft_Windows_Network.
Beispiel für eine Erweiterungshandlerregistrierung
Um einen bestimmten Handler zu aktivieren, erstellen Sie einen Unterschlüssel unter dem Erweiterungshandlertyp mit dem Namen des Handlers. Die Shell verwendet nicht den Namen des Handlers, muss sich jedoch von allen anderen Namen unter diesem Typunterschlüssel unterscheiden. Legen Sie den Standardwert des Namensunterschlüssels auf die Zeichenfolgenform der GUID des Handlers fest.
Im folgenden Beispiel werden Registrierungseinträge veranschaulicht, die Kontextmenü- und Eigenschaftenblatterweiterungshandler mithilfe eines Beispiels für myp-Dateitypen aktivieren.
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}
Zugehörige Themen