Erstellen von Spaltenhandlern

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

In der Ansicht Details im Windows Windows-Explorer werden normalerweise mehrere Standardspalten angezeigt. Jede Spalte listet Informationen, z. B. die Dateigröße oder den Dateityp, für jede Datei im aktuellen Ordner auf. Durch Implementieren und Registrieren eines Spaltenhandlers können Sie benutzerdefinierte Spalten für die Anzeige verfügbar machen.

Die allgemeinen Verfahren zum Implementieren und Registrieren eines Shellerweiterungshandlers werden unter Erstellen von Shellerweiterungshandlernerlä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

Mit 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. Daraufhin wird ein Dialogfeld angezeigt, in dem die verfügbaren Spalten für den Ordner aufgelistet werden und der Benutzer auswählen kann, welche Spalten angezeigt werden sollen. Die folgende Abbildung zeigt dieses Dialogfeld für das vorherige Beispiel.

Screenshot des Windows-Explorers mit angezeigten Dialogfeld "Details auswählen"

Indem Sie einen Spaltenhandler erstellen, können Sie benutzerdefinierte Spalten erstellen und dieser Liste hinzufügen. Beispielsweise könnte eine Sammlung von Dateien, die Musik enthalten, einen Spaltenhandler verwenden, um Spalten anzuzeigen, die den Interpreten und das Stück in jeder Datei 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 Dateitypsanzuzeigen. 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 Member 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 namens mit der Zeichenfolgenform der CLSID-GUID (Class Identifier) des Handlers. Eine allgemeine Erläuterung zum Registrieren von Shellerweiterungshandlern finden Sie unter Erstellen von Shellerweiterungshandlern. Im folgenden Beispiel wird veranschaulicht, wie ein Spaltenhandler registriert wird.

HKEY_CLASSES_ROOT
   Folder
      shellex
         ColumnHandlers
            {My Column Handler CLSID GUID}

Implementieren von Spaltenhandlern

Wie alle Shellerweiterungshandler handelt es sich bei Spaltenhandlern um IN-Process-Component Object Model (COM)-Objekte, die als DLLs implementiert werden. Sie exportieren zusätzlich zu IUnknown die IColumnProvider-Schnittstelle.

Windows Der Explorer ruft die drei von IColumnProvider exportierten Methoden auf, um die Informationen anzufordern, die zum Anzeigen der Spalte erforderlich sind. Die von Windows Explorer verwendete Prozedur lautet wie folgt:

  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 im Spalteneintrag der Datei enthalten sind.

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. Sie wird auf den Ordner festgelegt, dessen Detailansicht angezeigt werden soll. Store den Ordnernamen zur späteren Verwendung an, und initialisieren Sie das Handlerobjekt nach Bedarf.

Die GetColumnInfo-Methode

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

Spalten werden durch ihre OLE-Eigenschaftensatz-ID (FMTID) und eine zugeordnete Eigenschaften-ID (PID) identifiziert. Der erste Member der SHCOLUMNINFO-Struktur scid ist ein Zeiger auf eine SHCOLUMNID-Struktur, die zum Identifizieren der Spalte verwendet wird. Das fmtid-Element enthält die FMTID der Spalte und das Pid-Element die PID der Spalte. Ein STANDARD-FMTID/PID-Paar, das häufig zum Identifizieren von Spalten verwendet wird, ist z. B. die Author PID des Eigenschaftensatzes Zusammenfassungsinformationen.

Wenn möglich, sollte Ihr Handler vorhandene FMTIDs und PIDs verwenden, um die spalte zu identifizieren, die er unterstützt. Wenn Sie eine benutzerdefinierte SHCOLUMNID-Struktur verwenden, zeigt die Spalte nur Daten für die Dateien an, die vom Handler unterstützt werden. Wenn der Ordner andere Dateien enthält, sind deren Einträge leer. Wenn ein Ordner Dateien aus mehreren Dateitypen enthält, kann die Verwendung von FMTID-/PID-Standardwerten das Zusammenführen von Daten verschiedener 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 verbleibenden 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 in dem Ordner auf, der angezeigt werden soll. Der pscid-Parameter ist ein Zeiger auf eine SHCOLUMNID-Struktur, die die Spalte identifiziert. Der pscd-Parameter zeigt 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 durch pscd angegebene Datei angezeigt werden sollen. Wenn diese Datei von Ihrem Spaltenhandler unterstützt wird, weisen Sie ihren 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 zunächst den pwszExt-Member der Struktur überprüfen, auf die pscd zeigt. Dieser Member enthält die Dateinamenerweiterung. Wenn die Erweiterung angibt, dass die Datei kein Member eines dateityps ist, der von Ihrem Handler unterstützt wird, vermeiden Sie unnötige Verarbeitung, indem Sie sofort S _ FALSE zurückgeben.