Erstellen von Spaltenhandlern

[Dieses Feature wird nur unter Windows XP oder früher unterstützt. ]

Die Detailansicht im Windows-Explorer zeigt normalerweise mehrere Standardspalten an. Jede Spalte enthält Informationen, z. B. die Dateigröße oder den Typ, für jede Datei im aktuellen Ordner. Wenn Sie einen Spaltenhandler implementieren und registrieren, können Sie benutzerdefinierte Spalten für die Anzeige verfügbar machen.

Die allgemeinen Verfahren zum Implementieren und Registrieren eines Shell-Erweiterungshandlers werden unter Erstellen von Shellerweiterungshandlern erläutert. Dieses Dokument konzentriert sich auf die Aspekte der Implementierung, die für Spaltenhandler spezifisch sind.

Die folgenden Themen werden erläutert.

Funktionsweise von Spaltenhandlern

Die folgende Abbildung zeigt Windows Explorer in der Detailansicht.

Screenshot des Windows-Explorers in der Detailansicht

Bei Windows 2000 kann der Ordner auch eine Reihe von Spalten unterstützen, die standardmäßig nicht angezeigt werden. Der Benutzer kann zusätzliche Spalten anzeigen, indem er mit der rechten Maustaste auf eine der Spaltenüberschriften klickt und im Menü den Befehl Mehr... auswählt. Anschließend wird ein Dialogfeld angezeigt, das die verfügbaren Spalten für den Ordner auflistet und dem Benutzer ermöglicht, die anzuzeigenden Spalten auszuwählen. Die folgende Abbildung zeigt dieses Dialogfeld für das vorherige Beispiel.

Screenshot des Windows-Explorers mit angezeigtem Dialogfeld

Durch Erstellen eines Spaltenhandlers können Sie benutzerdefinierte Spalten erstellen und dieser Liste hinzufügen. Beispielsweise kann eine Sammlung von Dateien, die Musik enthalten, einen Spaltenhandler verwenden, um Spalten anzuzeigen, die den Künstler und das In jeder Datei enthaltene Stück auflisten.

Ein Spaltenhandler ist ein globales Objekt, das jedes Mal aufgerufen wird, wenn Windows Explorer die Detailansicht anzeigt. Spaltenhandler werden jedoch in der Regel verwendet, um benutzerdefinierte Spalten nur für Member eines bestimmten Dateityps anzuzeigen. Bevor die Detailansicht angezeigt wird, fragt Windows Explorer alle registrierten Spaltenhandler nach ihren Spaltenmerkmalen ab. Wenn der Benutzer eine der Spalten des Handlers ausgewählt hat, fragt Windows Explorer den Handler nach den zugeordneten Daten ab. Wenn ein Spaltenhandler eine Anforderung für Daten empfängt, stellt er diese bereit, wenn die Datei ein Mitglied des unterstützten Typs ist. Andernfalls wird die Anforderung ignoriert, indem S_FALSE zurückgegeben wird.

Registrieren von Spaltenhandlern

Spaltenhandler werden unter dem folgenden Unterschlüssel registriert.

HKEY_CLASSES_ROOT
   Folder
      shellex
         ColumnHandlers

Erstellen Sie einen Unterschlüssel von ColumnHandlers mit der Zeichenfolgenform der CLSID-GUID (Class Identifier) des Handlers. Eine allgemeine Erläuterung zum Registrieren von Shell-Erweiterungshandlern finden Sie unter Erstellen von Shell-Erweiterungshandlern. Im folgenden Beispiel wird veranschaulicht, wie Sie einen Spaltenhandler registrieren.

HKEY_CLASSES_ROOT
   Folder
      shellex
         ColumnHandlers
            {My Column Handler CLSID GUID}

Implementieren von Spaltenhandlern

Wie alle Shell-Erweiterungshandler sind Spaltenhandler prozessinterne COM-Objekte (Component Object Model), die als DLLs implementiert sind. Sie exportieren die IColumnProvider-Schnittstelle zusätzlich zu IUnknown.

Windows Explorer ruft die drei von IColumnProvider exportierten Methoden auf, um die Informationen anzufordern, die zum Anzeigen der Spalte benötigt werden. Die von Windows Explorer verwendete Prozedur lautet:

  1. Rufen Sie IColumnProvider::Initialize auf , um den Ordner anzugeben, der angezeigt werden soll.
  2. Rufen Sie IColumnProvider::GetColumnInfo auf, um den Bezeichner und die Merkmale der Spalte abzurufen.
  3. Wenn die Spalte vom Benutzer ausgewählt wurde, rufen Sie IColumnProvider::GetItemData für jede Datei im Ordner auf, um die Daten abzurufen, die in den Spalteneintrag der Datei gehören.

Die Initialize-Methode

Windows Explorer ruft IColumnProvider:Initialize auf, um den Spaltenhandler zu initialisieren. Die Methode verfügt über drei Parameter, aber derzeit wird nur wszFolder verwendet. Es ist auf den Ordner festgelegt, dessen Detailansicht angezeigt werden soll. Speichern Sie den Ordnernamen zur späteren Verwendung, und initialisieren Sie das Handlerobjekt nach Bedarf.

Die GetColumnInfo-Methode

Windows Explorer ruft als Nächstes IColumnProvider::GetColumnInfo auf, um den Bezeichner und die Merkmale der Spalte anzufordern. Er übergibt einen Index für die Spalte im dwIndex-Parameter . Dieser Index ist ein beliebiger Wert, der zum Auflisten von Spalten verwendet wird. Windows Explorer auch einen Zeiger auf eine SHCOLUMNINFO-Struktur übergeben. Diese Struktur wird verwendet, um den Bezeichner und die Merkmale der Spalte zurückzugeben. IColumnProvider::GetColumnInfo sollte den Membern der Struktur geeignete Werte zuweisen und zurückgeben.

Spalten werden durch ihre OLE-Eigenschaftssatz-ID (FMTID) und eine zugeordnete Eigenschafts-ID (PID) identifiziert. Das erste Element der SHCOLUMNINFO-Struktur , scid, ist ein Zeiger auf eine SHCOLUMNID-Struktur , die zum Identifizieren der Spalte verwendet wird. Sein fmtid-Element enthält die FMTID der Spalte, und sein pid-Element enthält die PID der Spalte. Ein FMTID/PID-Standardpaar, das häufig zum Identifizieren von Spalten verwendet wird, ist beispielsweise die Autoren-PID der Eigenschaft "Zusammenfassungsinformationen".

Wenn möglich, sollte Ihr Handler vorhandene FMTIDs und PIDs verwenden, um die unterstützte Spalte zu identifizieren. Wenn Sie eine benutzerdefinierte SHCOLUMNID-Struktur verwenden, werden in der Spalte nur Daten für die Dateien angezeigt, die vom Handler unterstützt werden. Wenn der Ordner andere Dateien enthält, sind die Einträge leer. Wenn ein Ordner Dateien aus mehr als einem Dateityp enthält, kann die Verwendung von FMTID/PID-Standardwerten das Zusammenführen von Daten aus verschiedenen Typen in derselben Spalte ermöglichen.

Legen Sie den vt-Member auf den VARIANT-Typ der Daten fest, die in der Spalte angezeigt werden sollen. Der am häufigsten verwendete Typ ist VT_LPSTR, da die meisten Spalten ihre Daten als Zeichenfolgen anzeigen. Die restlichen Elemente der SHCOLUMNINFO-Struktur werden verwendet, um die Merkmale der Spalte zu definieren. Weisen Sie werte nach Bedarf zu.

Die GetItemData-Methode

Wenn die Spalte des Spaltenhandlers ausgewählt wurde, ruft Windows Explorer IColumnProvider::GetItemData für jede Datei im ordner auf, die angezeigt werden soll. Der pscid-Parameter ist ein Zeiger auf eine SHCOLUMNID-Struktur , die die Spalte identifiziert. Der pscd-Parameter verweist auf eine SHCOLUMNDATA-Struktur , die die jeweilige Datei identifiziert.

Der pvarData-Parameter gibt die Daten zurück, die in der Spalte des Handlers für die von pscd angegebene Datei angezeigt werden sollen. Wenn diese Datei von Ihrem Spaltenhandler unterstützt wird, weisen Sie den Datenwert pvarData zu, und geben Sie S_OK zurück. Wenn die Datei von Ihrem Spaltenhandler nicht unterstützt wird, geben Sie S_FALSE zurück, ohne pvarData einen Wert zuzuweisen.

Viele Ordner enthalten eine Reihe von Dateien, die von keinem bestimmten Spaltenhandler unterstützt werden. Um die Effizienz zu verbessern, sollte IColumnProvider::GetItemData zuerst das pwszExt-Element der Struktur überprüfen, auf die von pscd verwiesen wird. Dieses Element enthält die Dateinamenerweiterung. Wenn die Erweiterung angibt, dass die Datei kein Mitglied eines vom Handler unterstützten Dateityps ist, vermeiden Sie unnötige Verarbeitung, indem Sie sofort S_FALSE zurückgeben.