In diesem kleinen Tutorial zum Windows API Code Pack werden wir uns näher mit den Shell-Interfaces zu Ordnern und Dateien in der Windows API auseinandersetzen.
Der grobe Aufbau der betreffenden Klassen im Windows API Code Pack schaut folgendermaßen aus:
Wichtig für das Tutorial sind eigentlich nur ShellFileSystemFolder für die Ordner und ShellFile für die Dateien. ShellLibrary haben wir bereits im vorherigen Tutorial verwendet.
Eigenschaften
Zugriff auf die Eigenschaften einer Datei oder eines Ordners ermöglicht die Properties-Eigenschaft des ShellObjects. Unter System finden sich alle möglichen Eigenschaften, die eine Datei besitzen kann, der Zugriff kann über zwei Varianten erfolgen:
// Entweder so:
var p = file.Properties.System.Title;
// Oder über den Namen der Eigenschaft:
var p2 = file.Properties.GetProperty<string>("System.Title");
Beide Male wird ein ShellProperty-Objekt zurückgeliefert. Den eigentlichen Inhalt der Dateieigenschaft erhalten wir schließlich über Value:
string title = file.Properties.System.Title.Value;
Darüber hinaus können wir uns natürlich auch mit LINQ bestimmte Dateien zurückliefern lassen. Um zum Beispiel um alle Dateien eines Ordners zu erhalten, die das Schlüsselwort bzw. die Markierung “Visual Studio 2010” enthalten genügt die folgende LINQ-Abfrage:
var files =
from f in ShellFileSystemFolder.FromFolderPath(@"C:\Folder\")
let k = f.Properties.System.Keywords.Value ?? Enumerable.Empty<string>()
where k.Contains("Visual Studio 2010")
select f;
foreach (var file in files)
Console.WriteLine(file.Name);
k enthält dabei entweder den String-Array von f.Properties.System.Keywords.Value, oder, falls die Eigenschaft bei der Datei nicht gesetzt wurde und null zurückgeliefert wird, eine leere String-Auflistung IEnumerable<string>.
Vorschaubilder
Das Windows API Code Pack bietet eine komfortable Möglichkeit auf die Vorschaubilder von Ordnern und Dateien, die man unter anderem vom Windows Explorer, zu zugreifen und das sowohl als System.Drawing.Bitmap, als auch als System.Windows.Media.Imaging.BitmapSource für WPF-Anwendungen. Die Einbindung in ein WPF-Image ist dementsprechend einfach.
Die Bilder stehen unter der Eigenschaft Thumbnail in den vier Größen Small, Medium, Large, ExtraLarge zur Verfügung.
<Image Source="{Binding Path=SelectedItem.Thumbnail.MediumBitmapSource}" />
Eine Verwendung in einer Anwendung könnte z. B. folgendermaßen ausschauen:
Mit dem neuen Betriebssystem Windows 7 hat Microsoft die Libraries eingeführt, die Dateien aus unterschiedlichen Ordnern zusammenfassen können.
Mit dem ersten Parameter geben wir den Namen der Library an, mit der der Dialog hantieren soll, es folgt der Handler des Elternfensters, als drittes der Titel des Dialogs und schließlich der Beschreibungstext. Der Dialog liefert keinerlei Informationen über die vom Benutzer getätigten Änderungen zurück.
Da das Webbrowser-Control bekanntermaßen ein Wrapper für den Internet Explorer ist, man diesen unter Umständen aber nicht unbedingt nutzen möchte, würde sich als Alternative ein Webbrowser-Control anbieten, welches Mozillas Gecko-Engine unterstützt, die unter anderem auch vom Firefox verwendet wird. Ein solches Control, was die Nutzung der Gecko-Engine in WinForms-Anwendungen ermöglicht, ist GeckoFx.