Création de gestionnaires de recherche

[Cette fonctionnalité est prise en charge uniquement sous Windows XP ou version antérieure. Utilisez Windows Search à la place.]

L’interpréteur de commandes prend en charge plusieurs utilitaires de recherche qui permettent aux utilisateurs de localiser des objets de l’espace de noms tels que des fichiers ou des imprimantes. Vous pouvez créer un moteur de recherche personnalisé et le rendre accessible aux utilisateurs en implémentant et en inscrivant un gestionnaire de recherche.

Les procédures générales d’implémentation et d’inscription d’un gestionnaire d’extension d’interpréteur de commandes sont décrites dans la section Création de gestionnaires d’extension d’interpréteur de commandes. Ce document se concentre sur les aspects de l’implémentation spécifiques aux gestionnaires de recherche.

Fonctionnement des gestionnaires de recherche

Les utilisateurs disposent de deux méthodes pour sélectionner un moteur de recherche. La première méthode consiste à utiliser le menu Démarrer. Avec les systèmes antérieurs à Windows 2000, la sélection de la commande Trouver dans le menu Démarrer affiche un sous-menu des moteurs de recherche disponibles. Sous Windows 2000 et les versions ultérieures, dans le menu Démarrer, la commande Trouver est renommée Rechercher. L’illustration suivante montre le bouton Rechercher sur un système Windows XP.

the start menu's search submenu

Les utilisateurs peuvent également lancer une recherche à partir de l’Explorateur Windows. Sur les systèmes antérieurs à Windows 2000, ils cliquent sur la commande Trouver du menu Outils pour afficher essentiellement le même menu que celui associé au menu Démarrer. Toutefois, l’Explorateur Windows pour Windows 2000 gère les moteurs de recherche d’une manière très différente. Au lieu de gérer les moteurs de recherche en tant que sous-menu du menu Outils, il existe maintenant un bouton Recherche dans la barre d’outils. Cliquez sur ce bouton pour ouvrir le volet Recherche de la barre d’Explorateur. L’illustration suivante montre le volet de recherche Rechercher des fichiers et des dossiers.

the windows explorer bar's search pane

Il existe plusieurs différences dans la manière dont Windows 2000 et les systèmes antérieurs gèrent les gestionnaires de recherche, qui affectent à la fois l’implémentation et l’inscription.

Pré-Windows 2000 Windows 2000 et versions ultérieures
Les gestionnaires de recherche sont implémentés en tant que type de gestionnaire de menu contextuel. Les gestionnaires de recherche peuvent être implémentés en tant que gestionnaires de menu contextuel ou en tant que documents HTML dynamiques (DHTML).
Les gestionnaires de recherche peuvent être statiques ou dynamiques. Les gestionnaires statiques sont chargés uniquement lorsqu’ils sont sélectionnés par l’utilisateur. Les gestionnaires dynamiques sont chargés par l’interpréteur de commandes au démarrage et ne sont pas arrêtés tant que l’interpréteur de commandes ne se ferme pas. Les gestionnaires implémentés en tant que gestionnaires de menu contextuel peuvent être statiques ou dynamiques. Les gestionnaires implémentés en tant que documents DHTML doivent être statiques.
Les gestionnaires de recherche s’affichent dans le sous-menu Trouver du menu Démarrer et dans le sous-menu Trouver du menu Outils de l’Explorateur Windows. Les gestionnaires de recherche s’affichent uniquement dans le sous-menu Rechercher du menu Démarrer. Pour qu’un volet de recherche personnalisé soit disponible dans la barre de menu de l’Explorateur Windows, vous devez l’implémenter en tant qu’objet de bande. Il est ensuite répertorié dans le sous-menu Barre de l’Explorateur du menu Affichage de l’Explorateur Windows.

 

Inscription des gestionnaires de recherche

Les gestionnaires de recherche sont inscrits sous la sous-clé FindExtensions des types de fichiers.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  FindExtensions

Ensuite, la procédure d’inscription dépend de la nature statique ou dynamique du gestionnaire. Pour une discussion générale sur l’inscription des gestionnaires d’extensions d’interpréteurs de commandes, consultez Création de gestionnaires d’extensions d’interpréteurs de commandes.

Inscription d’un gestionnaire de recherche statique

Les gestionnaires de recherche statiques sont chargés uniquement lorsqu’ils sont lancés par l’utilisateur. Cette approche fonctionne mieux pour les DLL qui sont petites et peuvent être chargées rapidement. Si vous utilisez DHTML pour implémenter votre gestionnaire, celui-ci doit être statique. Pour inscrire un gestionnaire d’extension statique, créez une sous-clé nommée pour le gestionnaire sous la sous-clé Statique de la sous-clé FindExtensions. Le nom n’est pas utilisé par le système, mais il ne doit pas être identique à d’autres noms de gestionnaires de recherche sous la sous-clé FindExtensions.

Gestionnaires de recherche basés sur le menu contextuel

Si votre gestionnaire est implémenté en tant que gestionnaire de menu contextuel, définissez la valeur par défaut de la sous-clé de nom du gestionnaire sur l’identificateur de classe (CLSID) GUID de l’objet. Sous la sous-clé du nom du gestionnaire, créez une sous-clé nommée 0 (zéro) et définissez sa valeur par défaut sur la chaîne qui sera affichée dans le sous-menu Rechercher ou Trouver. Vous pouvez activer les raccourcis clavier de la manière habituelle, en faisant précéder le caractère du raccourci d’une esperluette (&). Vous pouvez faire apparaître une petite icône facultative à droite du texte du menu en créant une sous-clé DefaultIcon sous la sous-clé 0. Définissez sa valeur par défaut sur une chaîne contenant le chemin d’accès au fichier contenant l’icône, suivi d’une virgule, puis de l’indice basé sur zéro de l’icône.

L’exemple suivant inscrit le gestionnaire de recherche MySearchEngine. Le texte du menu est « Mon moteur de recherche », avec M spécifié comme touche de raccourci. L’icône se trouve dans C :\MyDir\MySearch.dll, avec un index de 2.

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

Gestionnaires de recherche basés sur DHTML

Avec Windows 2000, vous pouvez également implémenter un gestionnaire de recherche en tant que document DHTML. Son nom apparaît dans le sous-menu Rechercher du menu Démarrer. Lorsque l’utilisateur le sélectionne, il lance l’Explorateur Windows avec la barre de l’Explorateur ouverte sur le document de recherche. Vous pouvez également spécifier un document DHTML à afficher à droite de la barre de l’Explorateur. Il n’existe aucun moyen de lancer un autre gestionnaire de recherche à partir du volet de recherche par défaut. Les moteurs de recherche peuvent être lancés directement à partir de l’Explorateur Windows, mais uniquement s’ils sont implémentés en tant qu’objets de bande.

Pour inscrire un gestionnaire de recherche basé sur DHTML, définissez la sous-clé de nom du gestionnaire sur la forme de chaîne de CLSID_ShellSearchExt (actuellement {169A0691-8DF9-11d1-A1C4-00C04FD75D13}) et créez les sous-clés suivantes.

  1. Créez une sous-clé 0(zéro) sous la sous-clé du nom du gestionnaire et définissez sa valeur par défaut sur le texte du menu.
  2. Pour afficher une icône à côté du texte du menu, créez une sous-clé DefaultIcon sous 0 et définissez sa valeur par défaut sur le chemin et l’index de l’icône.
  3. Créez une sous-clé SearchGUID sous 0. Attribuez un GUID au document DHTML et définissez la valeur par défaut de SearchGUID sous la forme d’une chaîne. Ce GUID n’a pas besoin d’être inscrit sous HKEY_CLASSES_ROOT\CLSID.
  4. Créez une sous-clé URL sous SearchGUID. Définissez sa valeur par défaut sur le chemin d’accès du document HTML qui apparaîtra dans la barre de l’Explorateur.
  5. Créez une sous-clé UrlNavNew sous SearchGUID. Définissez sa valeur par défaut sur le chemin d’accès du document HTML qui apparaîtra à droite de la barre de l’Explorateur.

L’exemple suivant inscrit le gestionnaire de recherche MySearchEngine implémenté sous la forme d’un document DHTML. Le texte du menu est « Mon moteur de recherche », avec M spécifié comme touche de raccourci. L’icône se trouve dans C :\MyDir\MySearch.dll, avec un index de 2. Le document DHTML de la barre de l’Explorateur est C :\MyDir\MySearch.htm, et le document qui sera affiché à droite de la barre de l’Explorateur est 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

Inscription d’un gestionnaire de recherche dynamique

Si votre gestionnaire est implémenté en tant que gestionnairede menu contextuel, vous pouvez également l’inscrire en tant que gestionnaire dynamique. Dans ce cas, il sera chargé avec l’interpréteur de commandes et ne se terminera que lorsque l’interpréteur de commandes se fermera. Les gestionnaires de recherche dynamiques réagissent beaucoup plus rapidement que les gestionnaires statiques lorsqu’ils sont lancés par l’utilisateur. Cette approche fonctionne mieux si la DLL de votre gestionnaire peut prendre beaucoup de temps à charger, ou si elle est susceptible d’être appelée fréquemment.

Les gestionnaires de recherche dynamiques sont inscrits sous la sous-clé FindExtensions.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  FindExtensions

Créez une sous-clé de FindExtensions nommée pour le gestionnaire et définissez sa valeur par défaut sur le GUID CLSID du gestionnaire. Les icônes de menu ne sont pas prises en charge pour les gestionnaires de recherche dynamiques. L’exemple suivant inscrit MySearchEngine en tant que gestionnaire de recherche dynamique.

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

Contrairement aux gestionnaires de recherche statiques, vous ne spécifiez pas le texte du menu dans le registre. Lorsque le gestionnaire est chargé, l’interpréteur de commandes appelle la méthode IContextMenu::QueryContextMenu du gestionnaire afin d’ajouter des éléments au sous-menu Trouver ou Rechercher.

Implémentation des gestionnaires de recherche

Les gestionnaires de recherche peuvent être implémentés en tant que gestionnaires de menu contextuel pour toutes les versions de Windows. Pour Windows 2000, ils peuvent également être implémentés en tant que documents DHTML.

Pour une discussion générale sur la manière d’implémenter les gestionnaires de menu contextuel, consultez Création de gestionnaires de menu contextuel. Les gestionnaires de recherche ne diffèrent des gestionnaires de menu contextuel standard que sur quelques points.

Pour les gestionnaires de menu statique, le sous-menu Trouver ou Rechercher est créé à partir des informations contenues dans le registre. Il n’est pas nécessaire que le gestionnaire ajoute un élément de menu, comme le ferait un gestionnaire de menu contextuel normal. L’interpréteur de commandes gère les gestionnaires de menu statique de la façon suivante.

  • Lorsque l’utilisateur lance l’élément de menu du gestionnaire, l’interpréteur de commandes charge la DLL du gestionnaire et appelle IContextMenu::InvokeCommand afin d’avertir le gestionnaire de lancer le moteur de recherche. Les méthodes IShellExtInit::Initialize et IContextMenu::QueryContextMenu ne sont pas appelées.
  • Lorsque IContextMenu::InvokeCommand est appelé, le membre lpVerb de la structure CMINVOKECOMMANDINFO transmise identifie la commande. Le mot de poids faible de lpVerb est défini sur l’équivalent numérique du nom de la sous-clé de la commande. Étant donné que cette sous-clé est normalement nommée 0, lpVerb est généralement défini sur zéro. Le gestionnaire doit ensuite lancer le moteur de recherche.

Les gestionnaires de recherche dynamiques sont implémentés de la même manière que les gestionnaires de menu contextuel normaux. La principale exception réside dans le fait que lorsque IShellExtInit::Initialize est appelé, les arguments pidlFolder et lpdobj sont définis sur NULL.

Les gestionnaires de recherche basés sur DHTML sont implémentés en tant que document DHTML normal. Ils peuvent inclure n’importe quelle technologie HTML, DHTML ou de script prise en charge par Windows Internet Explorer.