Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein Shell-Erweiterungshandlerobjekt muss registriert werden, bevor die Shell es verwenden kann. Dieses Thema enthält eine allgemeine Erläuterung zum Registrieren eines Shell-Erweiterungshandlers.
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 für Windows 2000 Systems".
Wie bei allen COM-Objekten (Component Object Model) müssen Sie eine GUID für den Handler mithilfe eines Tools wie Guidgen.exeerstellen, das mit dem Windows Software Development Kit (SDK) bereitgestellt wird. Erstellen Sie unter HKEY_CLASSES_ROOT\CLSID einen Unterschlüssel, dessen Name die Zeichenfolgenform dieser GUID ist. Da Shell-Erweiterungshandler In-Process-Server sind, müssen Sie auch einen InprocServer32-Unterschlüssel unter diesem GUID-Unterschlüssel erstellen, wobei der Wert (Standardwert) auf den Pfad der DLL des Handlers festgelegt ist. Verwenden Sie das Apartment-Threadingmodell. Hier sehen Sie ein Beispiel:
HKEY_CLASSES_ROOT
CLSID
{00021500-0000-0000-C000-000000000046}
InprocServer32
(Default) = %windir%\System32\Example.dll
ThreadingModel = Apartment
Important
ThreadingModel muss für Handler für Shellerweiterungen Apartment sein. Die Ordneransichten der Shell und der Windows-Explorer laufen auf einem Single-Threaded-Apartment-(STA)-Thread. Die Verwendung von Free- oder Both-Threadingmodellen kann intermittierende Fehler, Deadlocks oder Abstürze verursachen, die schwer zu diagnostizieren sind.
Für verpackte Desktop-Apps (MSIX) bevorzugen Sie die manifestbasierte Registrierung mithilfe des desktop4:Extension Elements, anstatt Registrierungsschlüssel direkt zu schreiben. Dadurch wird die ordnungsgemäße Paketidentität und die ordnungsgemäße Deinstallation sichergestellt.
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, wann er aufgerufen wird. Beispielsweise ist es üblich, einen Kontextmenühandler zu verwenden, der aufgerufen wird, 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
- Verwandte 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 den Shell-Objekttypnamen (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 Subkey name", der als Zeichenfolgenversion des Klassenbezeichners (CLSID) der Shell-Erweiterung bezeichnet wird. Mehrere Erweiterungen können unter dem Namen des Handlerunterschlüssels registriert werden, indem mehrere Unterschlüssel erstellt werden.
| Bearbeiter | Interface | Name des Handler-Unterschlüssels |
|---|---|---|
| Spaltenanbieterhandler | IColumnProvider | ColumnHandlers |
| Kontextmenühandler | IContextMenu | ContextMenuHandlers |
| Copyhook-Handler | ICopyHook | CopyHookHandlers |
| Drag-and-Drop-Verarbeitung | IContextMenu | DragDropHandlers |
| Handler für Eigenschaftenseiten | IShellPropSheetExt | PropertySheetHandlers |
Für die folgenden Handler ist der Standardwert des Schlüssels "Handler Subkey Name" die Zeichenfolgenversion der CLSID der Shell-Erweiterung. Für diese Handler kann nur eine Erweiterung registriert werden.
| Bearbeiter | Interface | Name des Handler-Unterschlüssels |
|---|---|---|
| Datenhandler | IDataObject | Datahandler |
| Drophandler | Idroptarget | DropHandler |
| Symbolhandler | IExtractIconA/W | IconHandler |
| Miniaturbildhandler | IThumbnailProvider | {E357FCCD-A995-4576-B01F-234630154E96} |
| Infotipp-Handler | IQueryInfo | {00021500-0000-0000-C000-0000000000046} |
| Shell-Link (ANSI) | IShellLinkA | {000214EE-0000-0000-C000-0000000000046} |
| Shelllink (UNICODE) | IShellLinkW | {000214F9-0000-0000-C000-000000000046} |
| Strukturierte Speicherung | IStorage | {0000000B-0000-0000-C000-0000000000046} |
| Metadaten | IPropertySetStorage | PropertyHandler |
| An Startmenü anheften | IStartMenuPinnedList | {a2a9545d-a0c2-42b4-9708-a0b2badd77c8} |
| An die Taskleiste anheften | {90AA3A4E-1CBA-4233-B8BB-535773D4849} |
Die angegebenen Unterschlüssel zum Hinzufügen von An Startmenü anheften und An Taskleiste anheften zum Kontextmenü eines Elements 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. Wenn Sie beispielsweise einen Eigenschaftenblatthandler für alle Dateien hinzufügen möchten, 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 aufgelisteten Unterschlüsseln registriert werden können. Weitere Details 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 |
| Folder | Alle Ordner | Kontextmenü, Eigenschaftenblatt, Verben |
| Verzeichnis | Dateiordner | Kontextmenü, Eigenschaftenblatt, Verben |
| Verzeichnis\Hintergrund | Dateiordnerhintergrund | Nur Verknüpfungsmenü |
| DesktopBackground | Desktophintergrund (Windows 7 und höher) | Kontextmenü, Verben |
| Antrieb | Alle Laufwerke in MyComputer, z. B. "C:\" | Kontextmenü, Eigenschaftenblatt, Verben |
| Network | Gesamtes Netzwerk (unter "Meine Netzwerkorte") | 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 |
| Printers | Alle Drucker | Kontextmenü, Eigenschaftenblatt |
| Audiocd | Audio-CD im CD-Laufwerk | Nur Verben |
| DVD | DVD-Laufwerk (Windows 2000) | Kontextmenü, Eigenschaftenblatt, Verben |
Hinweise
- Der Zugriff auf das Kontextmenü des Dateiordners erfolgt durch Klicken mit der rechten Maustaste in einem Dateiordner, jedoch nicht über den Inhalt des Ordners.
- "Verben" sind spezielle Befehle, die unter HKEY_CLASSES_ROOT\Subkey\Shell\Verb registriert sind.
- Für den Netzwerktyp\\# ist "#" ein Netzwerkanbietertypcode im Dezimaltrennzeichen. Der Netzwerkanbietertypcode ist das Hochwort 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 Unterschlüssel HKEY_CLASSES_ROOT\Netzwerktyp\\51 ist.
- "network_provider_name" ist der von WNetGetProviderName angegebene Name eines Netzwerkanbieters, wobei Leerzeichen durch Unterstriche ersetzt werden. Wenn beispielsweise der Microsoft Netzwerknetzwerkanbieter installiert ist, lautet der Anbietername "Microsoft Windows Netzwerk", und die 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-Unterschlüssel 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 Beispieldateityps ".myp" 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