3 Zeilen Code: Suche

Oft versteht man unter „Suchen“ die Internetsuche. Diese Form des Suchens beschränkt sich aber leider immer nur auf Inhalt im Internet und wird durch einige wenige Wörter eingegrenzt.

Suchen im lokalen Netzwerk und auf dem lokalen Rechner ist allerdings mindestens genauso wichtig. In Windows 7 befinden sich sehr mächtige und granular steuerbare Suchfunktionen. Das Einbinden dieser Funktionen in eigene Visual C#- oder Visual Basic-Anwendungen ist dank des Windows API Code Packs sehr einfach.

Da Festplatten immer größer werden, dauern Suchen auch immer länger - wenn man „mal einfach darauf“ los sucht. Mit Hilfe der eingebauten Suche kann man allerdings sehr viel an seinen Suchverfahren optimieren. Zum einen werden die indizierten Ordner im System automatisch direkt über den systemeigenen Index angesprochen, d.h. die Ergebnisse sind viel schneller da. Als weitere Möglichkeit kann man gezielt in bestimmten Bereichen des Systems suchen. Musikdateien oder Bilder befinden sich in der Regel nicht im Windows-Systemordner oder im Programme-Verzeichnis. Mit Windows 7 wurden z.B. Bibliotheken eingeführt, die es ermöglichen verschiedene Orte (Platten, Verzeichnisse, etc.) zu einer logischen Bibliothek zusammenzufassen.

Suchen in Bibliotheken

Um eine Bibliothek und die darin enthaltenen Verzeichnisse und Platten zu durchsuchen ist lediglich der folgende Code notwendig:

SearchCondition searchCondition = 
   SearchConditionFactory.ParseStructuredQuery(searchtext);
            
ShellSearchFolder searchFolder = 
   new ShellSearchFolder(
      searchCondition,
      (ShellContainer)KnownFolders.Libraries);

Über die SearchCondition-Klasse kann die Suche spezifiziert werden. Der ShellSearchFolder stellt eine aktive Suchmenge in Form einer Ordnerstruktur zur Verfügung, in die dynamisch das Suchergebnis einfließt.

Das Ergebnis in diesem Beispiel einfach an eine Listbox übergeben, die mittels Datenbindung und DataTemplate-Vorlage ein einfaches Aussehen erhält.

try
{
   listBox1.ItemsSource = searchFolder;
}
catch
{
   searchFolder.Dispose();
   searchFolder = null;
}

Die passende DataTemplate-Vorlage sieht wie folgt aus:

<ListBox
    Grid.Row="1"
    Margin="12,13,18,12"
    Name="listBox1">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel
                Orientation="Horizontal">
                <Image
                    Source="{Binding Thumbnail.MediumBitmapSource}" />
                <TextBlock
                    Text="{Binding Properties.System.Title.Value}" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Die beigefügte Beispielanwendung sieht dann wie folgt aus:

Zusammenfassung

Diese Suche lässt sich soweit ausbauen, dass auch unternehmensweite Datenquellen schnell und effizient durchsucht und deren Ergebnisse ansprechender als in einer rein textbasierten Liste angezeigt werden können.

Windows API Code Pack

Codebeispiel - Suche

 

Zur Artikelübersicht „3 Zeilen Code“