Erstellen von Shellerweiterungshandlern

Die Funktionen der Shell können mit Registrierungseinträgen und .ini erweitert werden. Dieser Ansatz zum Erweitern der Shell ist zwar einfach und für viele Zwecke ausreichend, aber er ist begrenzt. Wenn Sie beispielsweise die Registrierung verwenden, um ein benutzerdefiniertes Symbol für einen Dateityp anzugeben, wird für jede Datei dieses Typs das gleiche Symbol angezeigt. Wenn Sie die Shell mit der Registrierung erweitern, können Sie das Symbol für verschiedene Dateien desselben Typs nicht ändern. Andere Aspekte der Shell, wie z. B. das Eigenschaftenblatt, das angezeigt werden kann, wenn mit der rechten Maustaste auf eine Datei geklickt wird, können mit der Registrierung überhaupt nicht geändert werden.

Ein leistungsstärkerer und flexiblerer Ansatz zum Erweitern der Shell ist die Implementierung von Shellerweiterungshandlern. Diese Handler können für eine Vielzahl von Aktionen implementiert werden, die die Shell ausführen kann. Vor dem Ausführen der Aktion fragt die Shell den Erweiterungshandler ab und gibt ihr die Möglichkeit, die Aktion zu ändern. Ein häufiges Beispiel ist ein Kontextmenü-Erweiterungshandler. Wenn eine Datei für einen Dateityp implementiert ist, wird sie jedes Mal abgefragt, wenn mit der rechten Maustaste auf eine der Dateien geklickt wird. Der Handler kann dann dateispezifische zusätzliche Menüelemente angeben, anstatt denselben Satz für den gesamten Dateityp zu verwenden.

In diesem Dokument wird erläutert, wie Sie die Erweiterungshandler implementieren, mit denen Sie eine Vielzahl von Shellaktionen ändern können. Die folgenden Handler sind einem bestimmten Dateityp zugeordnet und ermöglichen die Datei-für-Datei-Angabe:

Handler BESCHREIBUNG
Kontextmenühandler Wird aufgerufen, bevor das Kontextmenü einer Datei angezeigt wird. Dadurch können Sie dem Kontextmenü Datei für Datei Elemente hinzufügen.
Datenhandler Wird aufgerufen, wenn ein Drag & Drop-Vorgang für dragShell-Objekte ausgeführt wird. Sie können dem Ablageziel zusätzliche Zwischenablageformate bereitstellen.
Drop-Handler Wird aufgerufen, wenn ein Datenobjekt in einer Datei gezogen oder gelöscht wird. Dadurch können Sie eine Datei zu einem Abbruchziel machen.
Symbolhandler Wird aufgerufen, bevor das Symbol einer Datei angezeigt wird. Sie können das Standardsymbol der Datei durch ein benutzerdefiniertes Symbol auf Dateibasis ersetzen.
Eigenschaftenblatthandler Wird aufgerufen, bevor das Eigenschaftenblatt Eigenschaften eines Objekts angezeigt wird. Dadurch können Sie Seiten hinzufügen oder ersetzen.
Handler für Miniaturansichtsbilder Stellt ein Bild zur Darstellung des Elements dar.
QuickInfo-Handler Stellt Popuptext zum Zeitpunkt der Mauszeigerbewegung über das -Objekt zurVerfingung von Popuptext zurVerkn.
Metadatenhandler Bietet Lese- und Schreibzugriff auf Metadaten (Eigenschaften), die in einer Datei gespeichert sind. Dies kann verwendet werden, um die Detailansicht, Infotips, die Eigenschaftenseite und Gruppierungsfeatures zu erweitern.

Andere Handler sind einem bestimmten Dateityp nicht zugeordnet, werden jedoch vor einigen Shellvorgängen aufgerufen:

Handler BESCHREIBUNG
Spaltenhandler Wird vom Windows-Explorer aufgerufen, bevor die Detailansicht eines Ordners angezeigt wird. Sie können der Detailansicht benutzerdefinierte Spalten hinzufügen.
Hookhandler kopieren Wird aufgerufen, wenn ein Ordner oder Druckerobjekt verschoben, kopiert, gelöscht oder umbenannt werden soll. Sie können den Vorgang genehmigen oder blockieren.
Drag & Drop-Handler Wird aufgerufen, wenn eine Datei mit der rechten Maustaste gezogen wird. Sie können das angezeigte Kontextmenü ändern.
Symbolüberlagerungshandler Wird aufgerufen, bevor das Symbol einer Datei angezeigt wird. Dadurch können Sie eine Überlagerung für das Symbol der Datei angeben.
Suchhandler Wird aufgerufen, um eine Suchmaschine zu starten. Sie können eine benutzerdefinierte Suchmaschine implementieren, auf die über das Startmenü oder den Windows zugegriffen werden kann.

Die Details zum Implementieren bestimmter Erweiterungshandler werden in den oben aufgeführten Abschnitten behandelt. Im restlichen Teil dieses Dokuments werden einige Implementierungsprobleme behandelt, die für alle Shell-Erweiterungshandler gelten.

Implementieren von Shellerweiterungshandlern

Ein Größerer Teil der Implementierung eines Shell-Erweiterungshandlerobjekts hängt vom Typ ab. Es gibt jedoch einige allgemeine Elemente. In diesem Abschnitt werden die Aspekte der Implementierung erläutert, die von allen Shell-Erweiterungshandlern gemeinsam genutzt werden.

Viele Shellerweiterungshandler sind IN-Process-Component Object Model (COM)-Objekte. Sie müssen einer GUID zugewiesen und registriert werden, wie unter Registrieren von Shell-Erweiterungshandlern beschrieben. Sie werden als DLLs implementiert und müssen die folgenden Standardfunktionen exportieren:

  • DllMain. Der Standardeinstiegspunkt für die DLL.
  • DllGetClassObject. Macht die Klassen factory des Objekts verfügbar.
  • DllCanUnloadNow. COM ruft diese Funktion auf, um zu bestimmen, ob das Objekt Clients bedient. Falls nicht, kann das System die DLL entladen und den zugeordneten Arbeitsspeicher frei geben.

Wie alle COM-Objekte müssen Shell-Erweiterungshandler eine IUnknown-Schnittstelle und eine Klassen factory implementieren. Die meisten Erweiterungshandler müssen auch eine IPersistFile- oder IShellExtInit-Schnittstelle in Windows XP oder früher implementieren. Diese wurden durch IInitializeWithStream, IInitializeWithItem und IInitializeWithFile in Windows Vista ersetzt. Die Shell verwendet diese Schnittstellen, um den Handler zu initialisieren.

Die IPersistFile-Schnittstelle muss wie folgt implementiert werden:

  • Datenhandler
  • Drop-Handler

In der Vergangenheit waren auch Symbolhandler erforderlich, um IPersistFile zuimplementieren. Dies ist jedoch nicht mehr der Fall. Für Symbolhandler ist IPersistFile jetzt optional, und andere Schnittstellen wie IInitializeWithItem werden bevorzugt.

Die IShellExtInit-Schnittstelle muss wie folgt implementiert werden:

  • Kontextmenühandler
  • Drag & Drop-Handler
  • Eigenschaftenblatthandler

Implementieren von IPersistFile

Die IPersistFile-Schnittstelle soll ermöglichen, dass ein Objekt aus einer Datenträgerdatei geladen oder in einer Datenträgerdatei gespeichert werden kann. Es verfügt über sechs Methoden zusätzlich zu IUnknown,fünf eigene Methoden und die GetClassID-Methode, die von IPersist geerbt wird. Bei Shellerweiterungen wird IPersist nur zum Initialisieren eines Shell-Erweiterungshandlerobjekts verwendet. Da in der Regel kein Lese- oder Schreibzugriff auf den Datenträger erforderlich ist, erfordern nur die Methoden GetClassID und Load eine Nichttokenimplementierungen.

Die Shell ruft zuerst GetClassID auf, und die Funktion gibt den Klassenbezeichner (CLSID) des Erweiterungshandlerobjekts zurück. Die Shell ruft dann Load auf und übergibt zwei Werte. Die erste , pszFileName, ist eine Unicode-Zeichenfolge mit dem Namen der Datei oder des Ordners, für die Shell ausgeführt werden soll. Der zweite ist dwMode, der den Dateizugriffsmodus angibt. Da normalerweise kein Zugriff auf Dateien erforderlich ist, ist dwMode in der Regel 0 (null). Die -Methode speichert diese Werte nach Bedarf für den späteren Verweis.

Das folgende Codefragment veranschaulicht, wie ein typischer Shellerweiterungshandler die Methoden GetClassID und Load implementiert. Es ist für die Verarbeitung von ANSI oder Unicode konzipiert. CLSID _ SampleExtHandler ist die GUID des Erweiterungshandlerobjekts, und CSampleExtHandler ist der Name der Klasse, die zum Implementieren der Schnittstelle verwendet wird. Die Variablen m _ szFileName und m _ dwMode sind private Variablen, die zum Speichern des Dateinamens und der Zugriffsflags verwendet werden.

wchar_t m_szFileName[MAX_PATH];    // The file name
DWORD m_dwMode;                  // The file access mode

CSampleExtHandler::GetClassID(CLSID *pCLSID)
{
    *pCLSID = CLSID_SampleExtHandler;
}

CSampleExtHandler::Load(PCWSTR pszFile, DWORD dwMode)
{
    m_dwMode = dwMode;
    return StringCchCopy(_szFileName, ARRAYSIZE(m_szFileName), pszFile);
}

Implementieren von IShellExtInit

Die IShellExtInit-Schnittstelle verfügt zusätzlich zu IUnknownnur über eine Methode, IShellExtInit::Initialize. Die -Methode verfügt über drei Parameter, mit denen die Shell verschiedene Informationstypen übergeben kann. Die übergebenen Werte hängen vom Typ des Handlers ab, und einige können auf NULL festgelegt werden.

  • pIDFolder enthält den Zeiger eines Ordners auf eine Elementbezeichnerliste (PIDL). Für Eigenschaftenblatterweiterungen ist dies NULL. Bei Kontextmenüerweiterungen ist es die PIDL des Ordners, der das Element enthält, dessen Kontextmenü angezeigt wird. Bei Drag & Drop-Handlern, die keine Standardmäßige sind, ist dies die PIDL des Zielordners.
  • pDataObject enthält einen Zeiger auf die IDataObject-Schnittstelle eines Datenobjekts. Das Datenobjekt enthält mindestens einen Dateinamen im CF _ HDROP-Format.
  • hRegKey enthält einen Registrierungsschlüssel für das Dateiobjekt oder den Ordnertyp.

Die IShellExtInit::Initialize-Methode speichert den Dateinamen, den IDataObject-Zeiger und den Registrierungsschlüssel nach Bedarf für die spätere Verwendung. Das folgende Codefragment veranschaulicht eine Implementierung von IShellExtInit::Initialize. Der Einfachheit halber wird in diesem Beispiel davon ausgegangen, dass das Datenobjekt nur eine einzelne Datei enthält. Im Allgemeinen kann es mehrere Dateien enthalten, die jeweils extrahiert werden müssen.

LPCITEMIDLIST  m_pIDFolder;           //The folder's PIDL
wchar_t        m_szFile[MAX_PATH];    //The file name
IDataObject   *m_pDataObj;            //The IDataObject pointer
HKEY           m_hRegKey;             //The file or folder's registry key

STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST pIDFolder, 
                                   IDataObject *pDataObj, 
                                   HKEY hRegKey) 
{ 
    // If Initialize has already been called, release the old PIDL
    ILFree(m_pIDFolder);
    m_pIDFolder = nullptr;

    // Store the new PIDL.
    if (pIDFolder)
    {
        m_pIDFolder = ILClone(pIDFolder);
    }
    
    // If Initialize has already been called, release the old
    // IDataObject pointer.
    if (m_pDataObj)
    { 
        m_pDataObj->Release(); 
    }
     
    // If a data object pointer was passed in, save it and
    // extract the file name. 
    if (pDataObj) 
    { 
        m_pDataObj = pDataObj; 
        pDataObj->AddRef(); 
      
        STGMEDIUM   medium;
        FORMATETC   fe = {CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
        UINT        uCount;

        if (SUCCEEDED(m_pDataObj->GetData(&fe, &medium)))
        {
            // Get the count of files dropped.
            uCount = DragQueryFile((HDROP)medium.hGlobal, (UINT)-1, NULL, 0);

            // Get the first file name from the CF_HDROP.
            if (uCount)
                DragQueryFile((HDROP)medium.hGlobal, 0, m_szFile, 
                              sizeof(m_szFile)/sizeof(TCHAR));

            ReleaseStgMedium(&medium);
        }
    }

    // Duplicate the registry handle. 
    if (hRegKey) 
        RegOpenKeyEx(hRegKey, nullptr, 0L, MAXIMUM_ALLOWED, &m_hRegKey); 
    return S_OK; 
}

CSampleExtHandler ist der Name der Klasse, die zum Implementieren der -Schnittstelle verwendet wird. Die Variablen m _ pIDFolder, m _ pDataObject, m _ szFileName und m _ hRegKey sind private Variablen, die zum Speichern der übergebenen Informationen verwendet werden. Der Einfachheit halber wird in diesem Beispiel davon ausgegangen, dass nur ein Dateiname vom Datenobjekt gespeichert wird. Nachdem die FORMATETC-Struktur aus dem Datenobjekt abgerufen wurde, wird DragQueryFile verwendet, um den Dateinamen aus dem medium.hGlobal-Member der FORMATETC-Struktur zu extrahieren. Wenn ein Registrierungsschlüssel übergeben wird, verwendet die Methode RegOpenKeyEx, um den Schlüssel zu öffnen, und weist das Handle m _ hRegKey zu.

Anpassung von Infotips

Es gibt zwei Möglichkeiten, Infotips anzupassen:

  • Implementieren Sie ein Objekt, das IQueryInfo unterstützt, und registrieren Sie dieses Objekt dann unter dem richtigen Unterschlüssel in der Registrierung (siehe Registrieren von Shellerweiterungshandlern weiter unten).
  • Geben Sie eine feste Zeichenfolge oder eine Liste bestimmter Dateieigenschaften an, die angezeigt werden sollen.

Um eine feste Zeichenfolge für eine Namespaceerweiterung anzuzeigen, erstellen Sie einen Eintrag namens InfoTip im Schlüssel {CLSID} Ihrer Namespaceerweiterung. Legen Sie den Wert dieses Eintrags entweder auf die Literalzeichenfolge fest, die Sie anzeigen möchten, wie in diesem Beispiel gezeigt, oder eine indirekte Zeichenfolge, die eine Ressource und einen Index innerhalb dieser Ressource angibt (zu Lokalisierungszwecken).

HKEY_CLASSES_ROOT
   CLSID
      {CLSID}
         InfoTip = InfoTip string for your namespace extension

Um eine feste Zeichenfolge für einen Dateityp anzuzeigen, erstellen Sie einen Eintrag namens InfoTip im ProgID-Schlüssel dieses Dateityps. Legen Sie den Wert dieses Eintrags entweder auf die anzuzeigende Literalzeichenfolge oder eine indirekte Zeichenfolge fest, die eine Ressource und einen Index innerhalb dieser Ressource angibt (zu Lokalisierungszwecken), wie in diesem Beispiel gezeigt.

HKEY_CLASSES_ROOT
   ProgID
      InfoTip = Resource.dll, 3

Wenn die Shell bestimmte Dateieigenschaften in der Infotip für einen bestimmten Dateityp anzeigen soll, erstellen Sie einen Eintrag namens InfoTip im ProgID-Schlüssel für diesen Dateityp. Legen Sie den Wert dieses Eintrags auf eine durch Semikolons getrennten Liste kanonischer Eigenschaftennamen, Formatbezeichnerpaare (FMTID)/Eigenschaftenbezeichnerpaare (PID) oder beides fest. Dieser Wert muss mit "prop:" beginnen, um ihn als Eigenschaftenlistenzeichenfolge zu identifizieren. Wenn Sie "prop:" weglassen, wird der Wert als Literalzeichenfolge betrachtet und als solche angezeigt.

Im folgenden Beispiel ist propname ein kanonischer Eigenschaftenname (z. B. System.Date) und {fmtid}, pid ist ein FMTID/PID-Paar.

HKEY_CLASSES_ROOT
   ProgID
      InfoTip = prop:propname;propname;{fmtid},pid;{fmtid},pid

Die folgenden Eigenschaftennamen können verwendet werden:

Eigenschaftenname Beschreibung Abgerufen von
Autor Autor des Dokuments PIDSI _ AUTHOR
Titel Titel des Dokuments PIDSI _ TITLE
Subject Betreffzusammenfassung PIDSI _ SUBJECT
Kommentar Dokumentkommentare PIDSI _ COMMENT- oder Ordner-/Treibereigenschaften
PageCount Anzahl von Seiten PIDSI _ PAGECOUNT
Name Anzeigename Standardordneransicht
OriginalLocation Speicherort der ursprünglichen Datei Ordner "Briefcase" und Papierkorb Ordner
DateDeleted Datum, an dem die Datei gelöscht wurde Papierkorb Ordner
Typ Dateityp Detailansicht des Standardordners
Size Größe der Datei Detailansicht des Standardordners
SyncCopyIn Identisch mit OriginalLocation Identisch mit OriginalLocation
Geändert Datum der letzten Änderung Detailansicht des Standardordners
Erstellt Erstellungsdatum Detailansicht des Standardordners
Zugegriffen Datum des letzten Zugriffs Detailansicht des Standardordners
InFolder Verzeichnis, das die Datei enthält Dokumentsuchergebnisse
Rang Qualität der Such übereinstimmung Dokumentsuchergebnisse
FreeSpace Verfügbarer Speicherplatz Laufwerke
NumberOfVisits Anzahl von Aufrufen Ordner "Favoriten"
Attribute Dateiattribute Detailansicht des Standardordners
Company Unternehmensname PIDDSI _ COMPANY
Category Dokumentkategorie PIDDSI _ CATEGORY
Copyright Medienrechte PIDMSI _ COPYRIGHT
HTMLInfoTipFile HTML-InfoTip-Datei Desktop.ini-Datei für den Ordner

Erweitern Windows Suche mit Shellerweiterungshandlern

Shellerweiterungshandler können verwendet werden, um die Benutzeroberfläche eines Windows Search-Protokollhandlers zu verbessern. Um solche Erweiterungen zu ermöglichen, muss der unterstützende Shellerweiterungshandler so entworfen werden, dass er als Datenquelle in den Suchprotokollhandler integriert werden kann. Informationen zum Verbessern eines Windows Search-Protokollhandlers durch Integration in einen Shellerweiterungshandler finden Sie unter Hinzufügen von Symbolen, Vorschauen und Kontextmenüs. Weitere Informationen zu Windows Search-Protokollhandlern finden Sie unter Developing Protocol Handlers.

Registrieren von Shellerweiterungshandlern

Ein Shell-Erweiterungshandlerobjekt muss registriert werden, bevor es von der Shell verwendet werden kann. In diesem Abschnitt wird allgemein erläutert, wie sie einen Shellerweiterungshandler registrieren.

Jedes Mal, wenn Sie einen Shellerweiterungshandler erstellen oder ändern, ist es wichtig, das System zu benachrichtigen, dass Sie eine Änderung mit SHChangeNotifyvorgenommen haben, wobei das SHCNE _ ASSOCCHANGED-Ereignis angegeben wird. Wenn Sie SHChangeNotify nicht aufrufen, wird die Änderung möglicherweise erst nach dem Neustart des Systems erkannt.

Wie bei allen COM-Objekten müssen Sie mithilfe eines Tools wie UUIDGEN.exe eine GUID für den Handler erstellen. Erstellen Sie unter HKEY _ CLASSES _ ROOT \ CLSID einen Schlüssel, dessen Name die Zeichenfolgenform der GUID ist. Da Shellerweiterungshandler Prozessserver sind, müssen Sie unter dem GUID-Schlüssel einen InProcServer32-Schlüssel erstellen, wobei der Standardwert auf den Pfad der DLL des Handlers festgelegt ist. Verwenden Sie das Apartmentthreadingmodell.

Jedes Mal, wenn die Shell eine Aktion vornimmt, die einen Shellerweiterungshandler umfassen kann, überprüft sie den entsprechenden Registrierungsschlüssel. Der Schlüssel, unter dem ein Erweiterungshandler registriert ist, steuert daher, wann er aufgerufen wird. Es ist beispielsweise üblich, einen Kontextmenühandler namens zu verwenden, wenn die Shell ein Kontextmenü für einen Member eines Dateitypsanzeigt. In diesem Fall muss der Handler unter dem ProgID-Schlüssel des Dateityps registriert werden.

Handlernamen

Um einen Shellerweiterungshandler 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 vordefinierte Shellobjekte).

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 unterhalb des Schlüssels "Handlerunterschlüsselname", dessen Name die Zeichenfolgenversion der CLSID der Shellerweiterung ist. Mehrere Erweiterungen können unter dem Namensschlüssel des Handlerunterschlüssels registriert werden, indem mehrere Unterschlüssel erstellt werden.

Handler Schnittstelle Handlerunterschlüsselname
Kontextmenühandler IContextMenu ContextMenuHandlers
Kopierhookhandler ICopyHook CopyHookHandlers
Drag & Drop-Handler IContextMenu DragDropHandlers
Eigenschaftenblatthandler IShellPropSheetExt PropertySheetHandlers
Spaltenanbieterhandler (in Windows Vista veraltet) IColumnProvider ColumnHandlers

Für die folgenden Handler ist der Standardwert des Schlüssels "Handler-Unterschlüsselname" die Zeichenfolgenversion der CLSID der Shellerweiterung. Für diese Handler kann nur eine Erweiterung registriert werden.

Handler Schnittstelle Handlerunterschlüsselname
Datenhandler Idataobject Datahandler
Drop-Handler Idroptarget DropHandler
Symbolhandler IExtractIconA/W IconHandler
Bildhandler IExtractImage {BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}
Bildhandler für Miniaturansichten IThumbnailProvider {E357FCCD-A995-4576-B01F-234630154E96}
QuickInfo-Handler IQueryInfo {00021500-0000-0000-C000-0000000000046}
Shelllink (ANSI ) IShellLinkA {000214EE-0000-0000-C000-0000000000046}
Shelllink (UNICODE) IShellLinkW {000214F9-0000-0000-C000-0000000000046}
Strukturierter Speicher Istorage {0000000B-0000-0000-C000-0000000000046}
Metadaten Ipropertystore PropertyHandler
Metadaten IPropertySetStorage (in Windows Vista veraltet) PropertyHandler
An Startmenü anheften IStartMenuPinnedList {a2a9545d-a0c2-42b4-9708-a0b2badd77c8}
An Taskleiste anheften {90AA3A4E-1CBA-4233-B8BB-535773D48449}

Die Unterschlüssel, die zum Hinzufügen von An Startmenü anheften und An Taskleiste an das Kontextmenü eines Elements anheften angegeben sind, sind nur für Dateitypen erforderlich, die den Eintrag IsShortCut enthalten.

Die Unterstützung für Spaltenanbieterhandler wurde in Windows Vista entfernt. Ab Windows Vista ist IPropertySetStorage zugunsten von IPropertyStoreveraltet.

Obwohl IExtractImage weiterhin unterstützt wird, wird IThumbnailProvider für Windows Vista und höher bevorzugt.

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 Schlü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 Informationen finden Sie in der Dokumentation des jeweiligen Handlers.

Unterschlüssel Beschreibung Mögliche Handler Version
* Alle Dateien Kontextmenü, Eigenschaftenblatt, Verben (siehe unten) Alle
AllFileSystemObjects Alle Dateien und Dateiordner Kontextmenü, Eigenschaftenblatt, Verben 4.71
Ordner Alle Ordner Kontextmenü, Eigenschaftenblatt, Verben Alle
Verzeichnis Dateiordner Kontextmenü, Eigenschaftenblatt, Verben Alle
\Verzeichnishintergrund Hintergrund des Dateiordners Nur Kontextmenü 4.71
Laufwerk Alle Laufwerke in MyComputer, z. B. "C: \ " Kontextmenü, Eigenschaftenblatt, Verben Alle
Network Gesamtes Netzwerk (unter "Meine Netzwerkorte") Kontextmenü, Eigenschaftenblatt, Verben Alle
\Netzwerktyp\# Alle Objekte vom Typ # (siehe unten) Kontextmenü, Eigenschaftenblatt, Verben 4.71
Netshare Alle Netzwerkfreigaben Kontextmenü, Eigenschaftenblatt, Verben 4.71
NetServer Alle Netzwerkserver Kontextmenü, Eigenschaftenblatt, Verben 4.71
_ _ Netzwerkanbietername Alle vom Netzwerkanbieter bereitgestellten Objekte "_ _ Netzwerkanbietername" Kontextmenü, Eigenschaftenblatt, Verben Alle
Drucker Alle Drucker Kontextmenü, Eigenschaftenblatt Alle
Audiocd Audio-CD auf CD-Laufwerk Nur Verben Alle
DVD DVD-Laufwerk (Windows 2000) Kontextmenü, Eigenschaftenblatt, Verben 4.71

Hinweise:

  • Auf das Kontextmenü des Dateiordners wird zugegriffen, indem Sie mit der rechten Maustaste in einen Dateiordner klicken, 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 Dezimalformat. Der Typcode des Netzwerkanbieters ist das obere Wort eines Netzwerktyps. Die Liste der Netzwerktypen wird in der Headerdatei Winnetwk.h angegeben (WNNC _ _ * NET-Werte). Beispielsweise ist WNNC _ NET _ SHIVA 0x00330000, sodass der entsprechende Typschlüssel HKEY _ CLASSES _ ROOT \ Network \ Type \ 51 wäre.
  • "_ _ Netzwerkanbietername" ist ein Netzwerkanbietername, wie durch WNetGetProviderNameangegeben, wobei die Leerzeichen in Unterstriche konvertiert werden. Wenn beispielsweise der Microsoft-Netzwerknetzwerkanbieter installiert ist, lautet der Anbietername "Microsoft Windows Network" und der entsprechende _ _ Netzwerkanbietername Microsoft Windows _ _ Network.

Beispiel für die Registrierung eines Erweiterungshandlers

Um einen bestimmten Handler zu aktivieren, erstellen Sie einen Unterschlüssel unter dem Typschlüssel des Erweiterungshandlers 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 Unterschlüssels name auf die Zeichenfolgenform der GUID des Handlers fest.

Das folgende Beispiel veranschaulicht Registrierungseinträge, die Kontextmenü- und Eigenschaftenblatterweiterungshandler mithilfe eines Beispieldateityps vom Typ ".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}

Das in diesem Abschnitt beschriebene Registrierungsverfahren muss für alle Windows Systeme befolgt werden.

Leitfaden zum Implementieren von In-Process-Erweiterungen