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
- Erweitern Windows Suche mit Shell-Erweiterungshandlern
- Registrieren von Shellerweiterungshandlern
- Zugehörige Themen
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.