Creación de controladores de búsqueda

[Esta característica solo se admite en Windows XP o versiones anteriores. Use Windows Search en su lugar.]

Shell admite varias utilidades de búsqueda que permiten a los usuarios buscar objetos de espacio de nombres como archivos o impresoras. Puede crear un motor de búsqueda personalizado y ponerlo a disposición de los usuarios mediante la implementación y el registro de un controlador de búsqueda.

Los procedimientos generales para implementar y registrar un controlador de extensión de Shell se describen en Creación de controladores de extensión de Shell. Este documento se centra en los aspectos de la implementación específicos de los controladores de búsqueda.

Cómo funcionan los controladores de búsqueda

Los usuarios tienen dos maneras de seleccionar un motor de búsqueda. La primera forma es desde el menú Inicio. Con sistemas anteriores a Windows 2000, al seleccionar el comando Buscar en el menú Inicio se muestra un submenú de los motores de búsqueda disponibles. Con Windows 2000 y versiones posteriores, se cambia el comando del nombre del menú deInicioBuscar por Búsqueda. En la ilustración siguiente se muestra el botón Buscar en un sistema Windows XP.

the start menu's search submenu

Los usuarios también pueden iniciar una búsqueda desde el Explorador de Windows. En sistemas anteriores a Windows 2000, hacen clic en el comando Buscar del menú Herramientas para mostrar esencialmente el mismo menú que el asociado al menú Inicio. Sin embargo, el Explorador de Windows para Windows 2000 controla los motores de búsqueda de una manera muy diferente. En lugar de controlar los motores de búsqueda como submenú del menú Herramientas, ahora hay un botón Buscar en la barra de herramientas. Al hacer clic en este botón, se abre el panel Buscar de la barra del Explorador. En la ilustración siguiente se muestra el panel de búsqueda Buscar archivos y carpetas.

the windows explorer bar's search pane

Hay varias diferencias en la forma en que Windows 2000 y los sistemas anteriores administran los controladores de búsqueda que afectan tanto a la implementación como al registro.

Anterior a Windows 2000 Windows 2000 y versiones posteriores
Los controladores de búsqueda se implementan como un tipo de controlador de menú contextual. Los controladores de búsqueda se pueden implementar como controladores de menú contextual o como documentos HTML dinámicos (DHTML).
Los controladores de búsqueda pueden ser estáticos o dinámicos. Los controladores estáticos solo se cargan cuando el usuario los selecciona. Los controladores dinámicos se cargan mediante shell al inicio y no se finalizan hasta que se cierre el shell. Los controladores implementados como controladores de menú contextual pueden ser estáticos o dinámicos. Los controladores implementados como documentos DHTML deben ser estáticos.
Los controladores de búsqueda aparecen en el submenú Buscar del menú Inicio y el submenú Buscar del menú Herramientas del Explorador de Windows. Los controladores de búsqueda solo aparecen en el submenú Buscar del menú Inicio. Para que un panel de búsqueda personalizado esté disponible a través de la barra de menú del Explorador de Windows, debe implementarlo como un objeto de banda. A continuación, se muestra en el submenú Barra del explorador del menú Vista del Explorador de Windows.

 

Registro de controladores de búsqueda

Los controladores de búsqueda se registran en la subclave FindExtensionsde los tipos de archivo.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  FindExtensions

Desde este punto, el procedimiento de registro depende de si el controlador debe ser estático o dinámico. Para obtener una explicación general de cómo registrar controladores de extensión de Shell, consulte Creación de controladores de extensión de Shell.

Registro de un controlador de búsqueda estático

Los controladores de búsqueda estáticos solo se cargan cuando el usuario los inicia. Este enfoque funciona mejor para los archivos DLL que son pequeños y se pueden cargar rápidamente. Si usa DHTML para implementar el controlador, debe ser estático. Para registrar un controlador de extensión estática, cree una subclave denominada para el controlador en la subclave Estática de la subclave FindExtensions. El sistema no usa el nombre, pero no debe ser idéntico a otros nombres de controlador de búsqueda en la subclave FindExtensions.

Controladores de búsqueda basados en menús contextuales

Si el controlador se implementa como un controlador de menú contextual, establezca el valor predeterminado de la subclave de nombre del controlador en el GUID del identificador de clase (CLSID) del objeto. En la subclave de nombre del controlador, cree una subclave denominada 0 (cero) y establezca su valor predeterminado en la cadena que se mostrará en el submenú Buscar o Encontrar. Puede habilitar métodos abreviados de teclado de la manera habitual, al preceder el carácter de método abreviado con una y comercial (&). Puede tener un icono pequeño opcional mostrado a la derecha del texto del menú creando una subclave DefaultIcon bajo la subclave 0. Establezca su valor predeterminado en una cadena que contenga la ruta de acceso del archivo que contiene el icono, seguido de una coma, seguido del índice de base cero del icono.

En el ejemplo siguiente se registra el controlador de búsqueda MySearchEngine. El texto del menú es "Mi motor de búsqueda", con M especificado como tecla de método abreviado. El icono está en C:\MyDir\MySearch.dll, con un índice 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

Controladores de búsqueda basados en DHTML

Con Windows 2000, también puede implementar un controlador de búsqueda como documento DHTML. Su nombre aparece en el submenú Buscar del menú Inicio. Cuando el usuario lo selecciona, inicia el Explorador de Windows con la barra del Explorador abierta en el documento de búsqueda. También puede especificar un documento DHTML que se mostrará a la derecha de la barra del Explorador. No hay ninguna manera de iniciar un controlador diferente desde el panel de búsqueda predeterminado. Los motores de búsqueda se pueden iniciar directamente desde el Explorador de Windows, pero solo si se implementan como objetos de banda.

Para registrar un controlador de búsqueda basado en DHTML, establezca la subclave de nombre del controlador en el formato de cadena de CLSID_ShellSearchExt (actualmente {169A0691-8DF9-11d1-A1C4-00C04FD75D13}) y cree las subclaves siguientes.

  1. Cree una subclave 0(cero) bajo la subclave nombre del controlador y establezca su valor predeterminado en el texto del menú.
  2. Para que se muestre un icono junto al texto del menú, cree una subclave DefaultIcon en 0 y establezca su valor predeterminado en la ruta de acceso e índice del icono.
  3. Cree una subclave SearchGUID en 0. Asigne un GUID al documento DHTML y establezca el valor predeterminado de SearchGUID en su formulario de cadena. No es necesario registrar este GUID en HKEY_CLASSES_ROOT\CLSID.
  4. Cree una subclave Url en SearchGUID. Establezca su valor predeterminado en la ruta de acceso del documento HTML que aparecerá en la barra del Explorador.
  5. Cree una subclave UrlNavNew en SearchGUID. Establezca su valor predeterminado en la ruta de acceso del documento HTML que aparecerá a la derecha de la barra del Explorador.

En el ejemplo siguiente se registra el controlador de búsqueda MySearchEngine implementado como un documento DHTML. El texto del menú es "Mi motor de búsqueda", con M especificado como tecla de método abreviado. El icono está en C:\MyDir\MySearch.dll, con un índice de 2. El documento DHTML de la barra del Explorador es C:\MyDir\MySearch.htm y el documento que se mostrará a la derecha de la barra del Explorador es 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

Registro de un controlador de búsqueda dinámica

Si el controlador se implementa como un controlador de menú contextual, también puede registrarlo como un controlador dinámico. En ese caso, se cargará con el shell y solo finalizará cuando se cierre el shell. Los controladores de búsqueda dinámicos responden mucho más rápidamente que los controladores estáticos cuando el usuario los inicia. Este enfoque funciona mejor si el archivo DLL del controlador puede tardar mucho tiempo en cargarse o si es probable que se llame con frecuencia.

Los controladores de búsqueda dinámica se registran en la subclave FindExtensions.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  FindExtensions

Cree una subclave de FindExtensions denominada para el controlador y establezca su valor predeterminado en el GUID CLSID del controlador. No se admiten iconos de menú para controladores de búsqueda dinámicos. En el ejemplo siguiente se registra MySearchEngine como un controlador de búsqueda dinámico.

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

A diferencia de los controladores de búsqueda estáticos, no se especifica el texto del menú en el Registro. Cuando se carga el controlador, shell llamará al método IContextMenu::QueryContextMenu del controlador para agregar elementos al submenú Encontrar o Buscar.

Implementación de controladores de búsqueda

Los controladores de búsqueda se pueden implementar como controladores de menú contextual para todas las versiones de Windows. Para Windows 2000, también se pueden implementar como documentos DHTML.

Para obtener una explicación general de cómo implementar controladores de menú contextual, vea Crear controladores de menú contextual. Los controladores de búsqueda difieren de los controladores de menú contextual estándar de solo unas pocas cosas.

Para los controladores de menú estáticos, el submenú Encontrar o Buscar se crea a partir de la información del Registro. No es necesario que el controlador agregue un elemento de menú, como lo haría un controlador de menú contextual normal. Shell administra controladores de menú estáticos de la siguiente manera.

Los controladores de búsqueda dinámica se implementan de la misma manera que los controladores de menú contextual normales. La excepción principal es que cuando se llama a IShellExtInit::Initialize, los argumentos pidlFolder y lpdobj se establecen en NULL.

Los controladores de búsqueda basados en DHTML se implementan como un documento DHTML normal. Pueden incluir cualquier tecnología HTML, DHTML o scripting compatible con Windows Internet Explorer.