Erstellen von Suchhandlern

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

Die Shell unterstützt verschiedene Suchprogramme, mit denen Benutzer*innen Namespaceobjekte wie Dateien oder Drucker finden können. Sie können eine benutzerdefinierte Suchmaschine erstellen und Benutzer*innen zur Verfügung stellen, indem Sie einen Suchhandler implementieren und registrieren.

Die allgemeinen Verfahren zum Implementieren und Registrieren eines Shellerweiterungshandlers werden in Erstellen von Shellerweiterungshandlern erläutert. Dieses Dokument konzentriert sich auf die Aspekte der Implementierung, die speziell für Suchhandler gelten.

Funktionsweise von Suchhandlern

Benutzer*innen haben zwei Möglichkeiten, eine Suchmaschine auszuwählen. Die erste Auswahlmöglichkeit ist das Startmenü. Bei Systemen vor Windows 2000 wird beim Auswählen des Suchbefehls (Find) im Startmenü ein Untermenü der verfügbaren Suchmaschinen angezeigt. In den englischen Versionen von Windows 2000 und höher wurde der Suchbefehl im Startmenü zu Find geändert. Die folgende Abbildung zeigt die Schaltfläche Suchen in einem Windows XP-System.

the start menu's search submenu

Benutzer*innen können eine Suche auch über den Windows-Explorer starten. In Systemen, die älter als Windows 2000 sind, klicken sie dafür im Menü Extras auf den Befehl Find. Damit wird im Wesentlichen dasselbe Menü angezeigt wie das, das dem Startmenü zugeordnet ist. Der Windows-Explorer für Windows 2000 verarbeitet Suchmaschinen jedoch ganz anders. Suchmaschinen werden nicht mehr als Untermenü des Menüs Extrasbehandelt; stattdessen befindet sich jetzt eine Schaltfläche Suchen auf der Symbolleiste. Durch Klicken auf diese Schaltfläche wird der Bereich Suchen der Explorer-Leiste geöffnet. Die folgende Abbildung zeigt den Suchbereich Nach Dateien und Ordnern suchen.

the windows explorer bar's search pane

Es gibt eine Reihe von Unterschieden in der Art und Weise, wie Windows 2000 und frühere Systeme Suchhandler verwalten, und diese Unterschiede wirken sich sowohl auf die Implementierung als auch auf die Registrierung aus.

Vor Windows 2000 Windows 2000 und höher
Suchhandler werden als eine Art Kontextmenühandler implementiert. Suchhandler können als Kontextmenühandler oder als DHTML-Dokumente (Dynamic HTML) implementiert werden.
Suchhandler können statisch oder dynamisch sein. Statische Handler werden nur geladen, wenn sie von Benutzer*innen ausgewählt werden. Dynamische Handler werden von der Shell beim Start geladen und erst beendet, wenn die Shell beendet wird. Als Kontextmenühandler implementierte Handler können statisch oder dynamisch sein. Als DHTML-Dokumente implementierte Handler müssen statisch sein.
Suchhandler werden im Untermenü Find des Startmenüs und im Untermenü Find des Windows-Explorer-Menüs Tools (Extras) angezeigt. Suchhandler werden nur im Untermenü Suchen des Startmenüs angezeigt. Um einen benutzerdefinierten Suchbereich über die Windows-Explorer-Menüleiste verfügbar zu machen, müssen Sie ihn als Bandobjekt implementieren. Der Bereich wird dann im Untermenü Explorer-Leiste des Windows-Explorer-Menüs Ansicht aufgeführt.

 

Registrieren von Suchhandlern

Suchhandler werden im Unterschlüssel FindExtensions der Dateitypen registriert.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  FindExtensions

An diesem Punkt hängt das Registrierungsverfahren davon ab, ob der Handler statisch oder dynamisch sein soll. Eine allgemeine Erläuterung zur Registrierung von Shellerweiterungshandlern finden Sie unter Erstellen von Shellerweiterungshandlern.

Registrieren eines statischen Suchhandlers

Statische Suchhandler werden nur geladen, wenn sie benutzerseitig gestartet werden. Dieser Ansatz eignet sich am besten für kleine DLLs, die schnell geladen werden können. Wenn Sie DHTML zum Implementieren des Handlers verwenden, muss der Handler statisch sein. Um einen statischen Erweiterungshandler zu registrieren, erstellen Sie einen nach dem Handler benannten Unterschlüssel im Unterschlüssel Static des Unterschlüssels FindExtensions. Der Name wird vom System nicht verwendet, darf aber nicht mit anderen Suchhandlernamen im Unterschlüssel FindExtensions identisch sein.

Kontextmenübasierte Suchhandler

Wenn der Handler als Kontextmenühandler implementiert wird, legen Sie den Standardwert des Unterschlüssels für den Handlernamen auf die GUID des Klassenbezeichners (CLSID) des Objekts fest. Erstellen Sie im Unterschlüssel für den Handlernamen einen Unterschlüssel namens 0 (Null), und legen Sie den Standardwert auf die Zeichenfolge fest, die im Untermenü Search bzw. Find für die Suche angezeigt wird. Sie können Tastenkombinationen auf die übliche Weise aktivieren, indem Sie dem Tastenkombinationszeichen ein kaufmännisches Und-Zeichen (&) voranstellen. Optional können Sie ein kleines Symbol rechts neben dem Menütext anzeigen, indem Sie im Unterschlüssel 0 den Unterschlüssel DefaultIcon erstellen. Legen Sie den Standardwert auf eine Zeichenfolge mit dem Pfad zu der Datei mit dem Symbol, gefolgt von einem Komma, gefolgt vom nullbasierten Index des Symbols, fest.

Das folgende Beispiel registriert den Suchhandler MySearchEngine. Der Menütext lautet „My Search Engine“, und als Tastenkombination ist der Buchstabe „M“ angegeben. Das Symbol befindet sich in „C:\MyDir\MySearch.dll“ und weist den Index 2 auf.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  FindExtensions
                     Static
                        MySearchEngine
                           (Default) = {MySearchEngine CLSID GUID}
                           0
                              (Default) = &My Search Engine
                              DefaultIcon
                                 (Default) = c:\MyDir\MySearch.dll,2

DHTML-basierte Suchhandler

Unter Windows 2000 können Sie einen Suchhandler auch als DHTML-Dokument implementieren. Der Name wird im Untermenü Search des Startmenüs aufgeführt. Wenn ein Benutzer oder eine Benutzerin den Namen auswählt, wird der Windows-Explorer gestartet, und die Explorer-Leiste ist für das Suchdokument geöffnet. Sie können auch ein DHTML-Dokument angeben, das rechts neben der Explorer-Leiste angezeigt werden soll. Es gibt keine Möglichkeit, aus dem standardmäßigen Suchbereich einen anderen Handler zu starten. Suchmaschinen können direkt über den Windows-Explorer gestartet werden, allerdings nur, wenn sie als Bandobjekte implementiert sind.

Um einen DHTML-basierten Suchhandler zu registrieren, legen Sie den Unterschlüssel für den Handlernamen auf die Zeichenfolgenform von „CLSID_ShellSearchExt (currently {169A0691-8DF9-11d1-A1C4-00C04FD75D13})“ fest, und erstellen Sie die folgenden Unterschlüssel.

  1. Erstellen Sie im Unterschlüssel für den Handlernamen einen Unterschlüssel namens 0 (Null), und legen Sie den Standardwert auf den Menütext fest.
  2. Damit neben dem Menütext ein Symbol angezeigt wird, erstellen Sie in 0 den Unterschlüssel DefaultIcon, und legen Sie den Standardwert auf den Pfad und den Index des Symbols fest.
  3. Erstellen Sie in 0 den Unterschlüssel SearchGUID. Weisen Sie dem DHTML-Dokument eine GUID zu, und legen Sie den Standardwert von SearchGUID auf die Zeichenfolgenform der GUID fest. Diese GUID muss nicht in HKEY_CLASSES_ROOT\CLSID registriert werden.
  4. Erstellen Sie in SearchGUID den Unterschlüssel Url. Legen Sie den Standardwert auf den Pfad des HTML-Dokuments fest, das in der Explorer-Leiste angezeigt werden soll.
  5. Erstellen Sie in SearchGUID den Unterschlüssel UrlNavNew. Legen Sie den Standardwert auf den Pfad des HTML-Dokuments fest, das rechts neben der Explorer-Leiste angezeigt werden soll.

Das folgende Beispiel registriert den als DHTML-Dokument implementierten Suchhandler MySearchEngine. Der Menütext lautet „My Search Engine“, und als Tastenkombination ist der Buchstabe „M“ angegeben. Das Symbol befindet sich in „C:\MyDir\MySearch.dll“ und weist den Index 2 auf. Das DHTML-Dokument der Explorer-Leiste ist „C:\MyDir\MySearch.htm“, und das Dokument, das rechts neben der Explorer-Leiste angezeigt wird, ist „C:\MyDir\MySearchPage.htm“.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  FindExtensions
                     Static
                        MySearchEngine
                           (Default) = {169A0691-8DF9-11d1-A1C4-00C04FD75D13}
                           0
                              (Default) = &My Search Engine
                              DefaultIcon
                                 (Default) = c:\MyDir\MySearch.dll,2
                                 SearchGUID
                                    (Default) = {My Search GUID}
                                    Url
                                       (Default) = C:\MyDir\MySearch.htm
                                    UrlNavNew
                                       (Default) = C:\MyDir\MySearchPage.htm

Registrieren eines dynamischen Suchhandlers

Wenn Ihr Handler als Kontextmenühandler implementiert ist, können Sie ihn auch als dynamischen Handler registrieren. In diesem Fall wird er mit der Shell geladen und erst beendet, wenn die Shell beendet wird. Dynamische Suchhandler reagieren beim Starten durch Benutzer*innen viel schneller als statische Handler. Dieser Ansatz funktioniert am besten, wenn die Ladezeit der DLL Ihres Handlers lang ist oder der Handler wahrscheinlich sehr häufig aufgerufen wird.

Dynamische Suchhandler werden im Unterschlüssel FindExtensions registriert.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  FindExtensions

Erstellen Sie in FindExtensions einen Unterschlüssel mit dem Namen des Handlers, und legen Sie den Standardwert auf die CLSID-GUID des Handlers fest. Menüsymbole werden bei dynamischen Suchhandlern nicht unterstützt. Das folgende Beispiel registriert MySearchEngine als dynamischen Suchhandler.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  FindExtensions
                     MySearchEngine
                        (Default) = {MySearchEngine CLSID GUID}
                        0
                           (Default) = &My Search Engine

Im Gegensatz zu statischen Suchhandlern geben Sie den Menütext in der Registrierung nicht an. Wenn der Handler geladen wird, ruft die Shell die IContextMenu::QueryContextMenu-Methode des Handlers auf, um dem Untermenü Find bzw. Search Elemente hinzuzufügen.

Implementieren von Suchhandlern

Suchhandler können bei allen Versionen von Windows als Kontextmenühandler implementiert werden. in Windows 2000 können sie auch als DHTML-Dokumente implementiert werden.

Eine allgemeine Erläuterung der Implementierung von Kontextmenühandlern finden Sie unter Erstellen von Kontextmenühandlern. Suchhandler unterscheiden sich nur in wenigen Aspekten von standardmäßigen Kontextmenühandlern.

Bei statischen Menühandlern wird das Untermenü Find bzw. Search anhand der Informationen in der Registrierung erstellt. Der Handler muss kein Menüelement hinzufügen, wie es bei einem normalen Kontextmenühandler der Fall ist. Die Shell verwaltet statische Menühandler auf folgende Weise.

  • Wenn ein Benutzer oder eine Benutzerin das Menüelement des Handlers startet, lädt die Shell die DLL des Handlers und ruft IContextMenu::InvokeCommand auf, um den Handler zu benachrichtigen, dass die Suchmaschine gestartet werden soll. Die Methoden IShellExtInit::Initialize und IContextMenu::QueryContextMenu werden nicht aufgerufen.
  • Wenn IContextMenu::InvokeCommand aufgerufen wird, identifiziert der lpVerb-Member der übergebenen CMINVOKECOMMANDINFO-Struktur den Befehl. Das Low-Order-Wort von lpVerb wird auf das numerische Äquivalent des Unterschlüsselnamens des Befehls festgelegt. Da dieser Unterschlüssel normalerweise 0 heißt, wird lpVerb in der Regel auf „Null“ festgelegt. Dann sollte der Handler die Suchmaschine starten.

Dynamische Suchhandler werden ähnlich wie normale Kontextmenühandler implementiert. Es gibt aber eine wesentliche Ausnahme: Beim Aufrufen von IShellExtInit::Initialize werden die Argumente pidlFolder und lpdobj auf NULL festgelegt.

DHTML-basierte Suchhandler werden als normales DHTML-Dokument implementiert. Sie können alle HTML-, DHTML- oder Skripttechnologien enthalten, die von Windows Internet Explorer unterstützt werden.