2016-04-21 24 views
1

Beim Durchsuchen eines Ordners in Windows Explorer kann ich die Benutzeroberfläche verwenden, um meiner Ansicht zusätzliche Spalten hinzuzufügen, die beim Durchsuchen des Ordners normalerweise nicht vorhanden sind, z. B. "Dateierweiterung" oder "Sprache". In Windows 10 führen Sie diese Aktion aus, indem Sie auf die Registerkarte "Ansicht" klicken, auf "Spalten hinzufügen" klicken, auf "Spalten auswählen ..." klicken, dann die gewünschten Spalten auswählen und auf "OK" klicken.Wie verwende ich .NET oder die Windows-API, um die View-Spalten in einem bestimmten Ordner in Windows Explorer zu ändern? (Windows 7 und höher)

Was ich tun möchte, ist diese Aktion programmgesteuert durchzuführen, idealerweise jede Spalte aus dieser Liste zu einem ausgewählten Verzeichnis hinzufügen mit der Hoffnung, diese Spalte mit Metadaten zu füllen. Ich habe ausgiebig nach Methoden gesucht, die das bewerkstelligen können, wie zB Column Handler shell extension, aber Support für IColumnHandler wurde nach XP gelöscht und funktioniert einfach nicht.

Von dort aus ist die einzige mögliche Option, den Property-Handler in der Windows-API zu verwenden und die Werte direkt aus der Registrierung zu lesen. Ich bin mir jedoch nicht sicher, wie ich das machen soll. Ich habe versucht, online einige Beispiele dafür zu finden, und das hat mich zu einer ganzen Reihe von Sackgassen geführt. Ich verstehe, dass es schwierig sein muss, aber ich bin sicher, dass es jemand geschafft hat, es zum Laufen zu bringen.

Gibt es Beispiele oder Hinweise zur Verwendung des Eigenschaftshandlers in der Windows-API zum Hinzufügen von Spalten zu einer Ansicht in einem Windows Explorer-Ordner? Habe ich noch andere Möglichkeiten? Jede Rückmeldung wird geschätzt.

Antwort

0

In einer Shell-Ansicht wählen Sie Spalten aus, indem Sie IColumnManager :: SetColumns mit einem Array von PROPERTYKEY-Strukturen aufrufen.

Angenommen, Sie haben eine IShellBrowser-Schnittstelle des Windows Explorer-Fensters, rufen Sie GetActiveShellView auf, um die Shell-Ansicht abzurufen, und fragen Sie dann das Ansichtsobjekt nach IColumnManager ab (eine Umwandlung in C#).