Grundlegendes zu Shellnamespaceerweiterungen
Windows Explorer bietet eine grafische Darstellung des Shell-Namespace in Kombination mit Tools, mit denen Benutzer mit Shell-Objekten interagieren können. Mit einer Namespaceerweiterung können Sie jeden Datenkörper übernehmen und windows Explorer dem Benutzer als virtuellen Ordner präsentieren. Wenn ein Benutzer diesen Ordner durchsucht, werden Ihre Daten wie der Rest des Shell-Namespaces als strukturstrukturierte Hierarchie von Ordnern und Dateien dargestellt. Benutzer und Anwendungen können mit dem Inhalt dieses virtuellen Ordners auf die gleiche Weise wie mit jedem anderen Namespaceobjekt interagieren. In diesem Dokument wird erläutert, wie eine Namespaceerweiterung erstellt wird.
- Funktionsweise einer Namespaceerweiterung
- Das Standardobjekt der Systemordneransicht (DefView)
- Wie Windows Explorer mit einer Namespaceerweiterung interagiert
Hinter den Kulissen wird jeder Ordner, den Windows Explorer anzeigt, durch ein COM-Objekt (Component Object Model) dargestellt, das als Ordnerobjekt bezeichnet wird. Jedes Mal, wenn der Benutzer mit einem Ordner oder dessen Inhalt interagiert, kommuniziert die Shell über eine von mehreren Standardschnittstellen mit dem zugeordneten Ordnerobjekt. Das Ordnerobjekt tut dann alles, was erforderlich ist, um auf die Aktion des Benutzers zu reagieren, und die Shell aktualisiert die Windows Explorer Anzeige.
Die meisten Dateien und Ordner, mit denen Benutzer interagieren, sind Teil des Dateisystems oder eines virtuellen Systemordners wie der Papierkorb. In anderen Dokumentationen wurde erläutert, wie Sie das Verhalten dieser Standardordner anpassen können, um die Anforderungen Ihrer Anwendung zu erfüllen, indem Sie die Registrierung ändern oder Shell-Erweiterungshandler implementieren. Das Erweitern der Shell auf diese Weise ist jedoch am nützlichsten, wenn Ihre Informationen problemlos in Form von normalen Dateisystemdateien oder -ordnern gepackt werden können.
Es gibt eine Reihe von Situationen, in denen das Speichern von Daten als Sammlung von Dateisystemordnern und -dateien unerwünscht oder sogar unmöglich ist. Einige Beispiele für diese Art von Daten sind:
- Eine Sammlung von Elementen, die am effektivsten in einer einzelnen Datei gepackt wird, z. B. einer Datenbank.
- Eine Sammlung von Elementen, die auf einem Remotecomputer ohne Windows-Standarddateisystem gespeichert sind. Ein Beispiel für solche Daten sind die Informationen, die auf einem persönlichen digitalen Assistenten (PDA) oder einer Digitalkamera gespeichert sind.
- Eine Auflistung von Elementen, die keine gespeicherten Daten darstellen. Ein Beispiel für solche Daten sind die Druckerlinks, die im Standardordner Drucker enthalten sind.
Eine Möglichkeit, diese Art von Daten einem Benutzer zu präsentieren, besteht darin, eine Anwendung zu schreiben, damit Benutzer die verschiedenen Elemente anzeigen und mit ihnen interagieren können. Wenn Ihre Daten jedoch als Ordner-/Dateihierarchie dargestellt werden können, müssen Sie möglicherweise einen Großteil der Funktionen implementieren, die Sie implementieren müssen, Benutzeroberflächendienste sein, die bereits von Windows Explorer bereitgestellt werden. Ein viel effizienterer Ansatz könnte sein, eine Namespaceerweiterung zu schreiben und Windows Explorer zu Ihrer gui werden zu lassen.
Um eine Namespaceerweiterung zu implementieren, müssen Ihre Informationen als strukturstrukturierter Namespace organisiert sein. Ihr Namespacestamm wird als virtueller Ordner im Shell-Namespace angezeigt. Der Stammordner und alle zugehörigen Unterordner und Datenelemente werden Teil des Shell-Namespace, und Windows Explorer wird ihre Benutzeroberfläche. So können Sie Ihre Informationen dem Benutzer auf vertraute und leicht zugängliche Weise mit viel weniger Benutzeroberflächenprogrammierung präsentieren, als für eine benutzerdefinierte Anwendung erforderlich wäre.
Eine Namespaceerweiterung besteht aus zwei grundlegenden Komponenten:
- Ein Daten-Manager
- Eine Schnittstelle zwischen dem Daten-Manager und Windows Explorer
Die erste Komponente in der Liste liegt ganz bei Ihnen. Sie können Ihre Daten auf die effektivste Weise speichern und verwalten. Die zweite Komponente ist der Code, der benötigt wird, um Ihre Daten als Ordnerobjekte zu packen und die Interaktion mit Windows Explorer zu verarbeiten. Windows Explorer können diese Objekte dann aufrufen, damit Benutzer Ihre Daten anzeigen und mit ihnen interagieren können, als ob es sich um eine Sammlung von Ordnern und Dateien handelte. Die Ordnerobjekte Ihrer Namespaceerweiterung müssen mit Windows Explorer interagieren, als wären sie normale Ordner. Bevor Sie versuchen, eine Namespaceerweiterung zu implementieren, müssen Sie zunächst verstehen, wie Windows Explorer ein Ordnerobjekt verarbeitet.
Die Shell stellt eine Standardimplementierung der Ordneransicht bereit, die umgangssprachlich als DefView bezeichnet wird, sodass Sie einen Großteil des Aufwands der Implementierung Ihrer eigenen Namespaceerweiterung vermeiden können. Da einige Ansichtsfeatures nicht über benutzerdefinierte Ansichten erreicht werden können, wird häufig empfohlen, das Standardobjekt der Systemordneransicht anstelle einer benutzerdefinierten Ansicht zu verwenden. Weitere Informationen finden Sie unter SHCreateShellFolderView.
Windows Explorer bietet Benutzern eine GUI, mit der sie eine Vielzahl von Aufgaben ausführen können, einschließlich:
- Navigieren in der Namespacehierarchie und Anzeigen des Inhalts von Ordnern
- Verwalten des Inhalts des Namespace durch Verschieben, Löschen und Kopieren von Objekten.
- Abrufen einer Vielzahl von Informationen zu Objekten.
- Starten von Anwendungen.
Die Windows Explorer GUI verfügt über fünf grundlegende Komponenten. Die folgende Abbildung benennt die Komponenten und zeigt, wo sie normalerweise in Windows Explorer angezeigt werden.
Wenn ein Benutzer einen Ordner anzeigt, der zu einer Namespaceerweiterung in Windows Explorer gehört, hat das Ordnerobjekt zumindest teilweise die Kontrolle über den Inhalt aller fünf Bereiche.
Die Strukturansicht bietet eine allgemeine Ansicht des Namespace. Dieser Bereich hostet ein Strukturansichtssteuerelement , das jeden Namespaceordner und die Position des Ordners in der Namespacehierarchie anzeigen kann. Ein Benutzer kann mehrere Vorgänge mit dem Bereich der Strukturansicht ausführen, einschließlich:
- Anzeigen oder Ausblenden der nächsten Ebene im Namespace
- Kopieren, Verschieben oder Löschen von Ordnern.
- Klicken Sie mit der rechten Maustaste auf einen Ordner, um ein Kontextmenü anzuzeigen.
- Auswählen eines Ordners und Anzeigen seines Inhalts in der Ordneransicht.
Die Strukturansicht kommuniziert mit Ordnerobjekten hauptsächlich über ihre IShellFolder-Schnittstelle . Wenn ein Benutzer beispielsweise auf das Pluszeichen (+) neben dem Ordnersymbol klickt, erweitert Windows Explorer die Anzeige, um die Unterordner des Ordners anzuzeigen. Um die zum Aktualisieren der Strukturansicht erforderlichen Informationen abzurufen, führt die Shell mehrere Aufrufe an die IShellFolder-Schnittstelle des Ordnerobjekts aus:
- Fordern Sie die Attribute des Ordners an.
- Listet den Inhalt des Ordners auf.
- Anforderungsanzeigenamen für jeden Unterordner.
- Fordern Sie ein Symbol an, das neben jedem Ordner angezeigt werden soll.
Windows Explorer aktualisiert dann die Strukturansicht, um die Unterordner des ausgewählten Ordners anzuzeigen. Wenn die Unterordner über Unterordner verfügen, wird neben dem Ordnersymbol ein "+"-Zeichen angezeigt. Es gibt eine Reihe komplexerer Aufgaben, die ein Benutzer auch mit der Strukturansicht ausführen kann, einschließlich:
- Verwenden der Zwischenablage zum Ausschneiden oder Kopieren eines Ordners und Einfügen in einen anderen Ordner.
- Per Drag-and-Drop können Sie einen Ordner ausschneiden oder kopieren und ihn in einem anderen Ordner ablegen.
- Verwenden einer Suchmaschine zum Suchen nach Elementen in einem Ordner oder seinen Unterordnern.
- Ändern der Eigenschaften des Ordners.
Eine ausführlichere Diskussion darüber, wie eine Namespaceerweiterung diese Benutzeraktionen verarbeitet, finden Sie unter Implementieren der Grundlegenden Ordnerobjektschnittstellen.
Wenn ein Benutzer einen Ordner auswählt, wird der Inhalt des Ordners in der Ordneransicht angezeigt. Bis zu einem gewissen Grad überschneidet sich die normale Funktionalität der Ordneransicht mit der Strukturansicht. Benutzer können Ordner verschieben oder kopieren, Ordnereigenschaften ändern, den Inhalt eines Unterordners anzeigen, ein Kontextmenü für einen Ordner anzeigen usw. Es gibt jedoch einige unterschiede zwischen der Strukturansicht und der Ordneransicht:
- Die Ordneransicht zeigt nur den Inhalt eines einzelnen Ordners an, nicht einen Teil oder die gesamte Namespacehierarchie.
- In der Ordneransicht werden Sowohl Dateiobjekte als auch Ordnerobjekte angezeigt.
- Die Ordneransicht kann viel mehr Informationen zu Objekten als die Strukturansicht anzeigen.
- In der Ordneransicht können Namespaceerweiterungen nahezu vollständige Kontrolle darüber haben, welche Informationen wie angezeigt werden. Nur kleinere Aspekte der Strukturansicht, z. B. Ordnersymbole, können geändert werden.
Im Gegensatz zur Strukturansicht steuert Windows Explorer den Inhalt der Ordneransicht nicht direkt. Die Ordneransicht ist ein Bereich, den Windows Explorer für Ordnerobjekte bereitstellt. Das Anzeigen und Verwalten des Inhalts eines Ordners in der Ordneransicht obliegt dem Ordnerobjekt. Obwohl die meisten Ordneransichten einem ziemlich Standardformat folgen, gibt es tatsächlich einige Einschränkungen, was angezeigt werden kann oder wie. Ein Extremfall ist der Internetordner, bei dem es sich um einen Browser mit vollem Funktionsumfang handelt.
Wenn ein Benutzer einen Ordner auswählt, der zu Ihrer Namespaceerweiterung gehört, erstellen Sie ein Fenster und übergeben das Handle an Windows Explorer. Dieses Fenster wird ein untergeordnetes Element des Ordneransichtsfensters. Windows Explorer stellt die Dimensionen des Ordneransichtsfensters bereit, legt jedoch keine Einschränkungen für den Inhalt Des untergeordneten Fensters fest. Anschließend können Sie das untergeordnete Fenster verwenden, um die Ordneransicht des Ordners anzuzeigen.
Namespaceerweiterungen verwenden einen von zwei Ansätzen zum Erstellen einer Ordneransicht:
- Verwenden Sie Ihr untergeordnetes Fenster, um ein Listenansichtssteuerelement zu hosten. Mit diesem Steuerelement können Sie den Inhalt eines Ordners auf die gleiche Weise wie die klassische Ansicht von Windows Explorer anzeigen.
- Verwenden Sie Ihr untergeordnetes Fenster, um ein WebBrowser-Steuerelement zu hosten , und verwenden Sie ein DHTML-Dokument (Dynamic HTML), um den Inhalt des Ordners anzuzeigen.
Beide Ansätze zeigen eine Ordneransicht an, die der für Systemordner angezeigten sehr ähnlich aussieht. Wenn Sie jedoch ein anderes Anzeigeschema verwenden möchten, können Sie dies tun.
Wie die meisten Windows-Anwendungen stellt Windows Explorer dem Benutzer eine Sammlung von Tools zur Verfügung. Eine vollständige Auswahl an Tools ist über die Menüleiste verfügbar. Die am häufigsten verwendeten Tools werden auch durch Schaltflächen oder Bearbeitungsfelder auf einer Symbolleiste dargestellt. Im Gegensatz zu vielen Windows-Anwendungen ist die Windows-Explorer-Menüleiste tatsächlich ein Symbolleistensteuerelement, das so angepasst wurde, dass es sich wie ein herkömmliches Menü verhält. Sowohl die Menüleiste als auch die Symbolleiste sind in ein Rebar-Steuerelement integriert, damit Benutzer die einzelnen Steuerelemente nach ihren Anforderungen organisieren können.
Standardmäßig unterstützt Windows Explorer einen Standardsatz von Schaltflächen und Menüelementen, z. B. Kopieren und Eigenschaften. Ihre Namespaceerweiterung kann die Menüleiste und Symbolleisten anpassen, indem Sie Standardtools löschen und benutzerdefinierte Tools hinzufügen. Wenn Ihr Ordneransichtsobjekt initialisiert wird, übergibt Windows Explorer einen Zeiger an die IShellBrowser-Schnittstelle. Diese Schnittstelle unterstützt mehrere Methoden, die Sie aufrufen können, um die Menüleiste und Symbolleiste anzupassen. Wenn der Benutzer eines Ihrer benutzerdefinierten Menüelemente oder Symbolleistenschaltflächen auswählt, leitet Windows Explorer WM_COMMAND Nachrichten für benutzerdefinierte Menü- und Symbolleistenelemente an die Fensterprozedur Ihres untergeordneten Fensters weiter.
Die Windows-Explorer status-Leiste zeigt Informationen zum aktuell ausgewählten Objekt an. Ihre Namespaceerweiterung kann die status leiste verwenden, um status Informationen anzuzeigen, z. B. eine Textzeichenfolge. Sie können die status leiste anpassen, indem Sie IShellBrowser aufrufen.