La aplicación de Shell manejador de búsqueda utilizando Delphi
La Shell admite varios servicios públicos de búsqueda que permiten a los usuarios localizar objetos de nombres tales como archivos o impresoras. Puede crear un motor de búsqueda personalizado y ponerlos a disposición de los usuarios mediante la aplicación y el registro de un manejador de búsqueda.
Los usuarios tienen dos maneras de seleccionar un motor de búsqueda. El primero es desde el menú Inicio. Con los sistemas anteriores a Microsoft Windows 2000, seleccionando el comando Buscar del menú Inicio muestra un submenú de los motores de búsqueda disponibles. Con Windows 2000 y versiones posteriores, el menú Inicio del comando Buscar se denominará de búsqueda.
Los usuarios también pueden iniciar una búsqueda desde el Explorador de Windows. En los sistemas anteriores a Windows 2000, haga clic en el comando Buscar del menú Herramientas para mostrar esencialmente el mismo menú como el asociado con el menú Inicio. Sin embargo, el Explorador de Windows para Windows 2000 se ocupa de los motores de búsqueda en una manera muy distinta. En lugar de manipulación de los motores de búsqueda como de un submenú en el menú Herramientas, hay ahora un botón de búsqueda en la barra de herramientas. Al hacer clic en este botón se abre el Explorador de la barra de búsqueda de panel
El siguiente ejemplo muestra cómo poner en práctica manipuladora de Shell de búsqueda usando Borland Delphi. Como cualquier extensión de shell que debe aplicarse como en el proceso del Modelo de objetos componentes (COM) del objeto. Debe ser asignado un identificador único global (GUID) y registrada utilizando regsvr32.exe
library SearchHandler;($ R *. RES)
uses
ComServ,
HandlerM in 'HandlerM.pas' ;
exportaciones
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer;
empezar
final.
{******************************************************************************************************************************* ***************************}
Name : TSearchEngine
Author : Perevoznyk Serhiy
Description : Shell Search Handler
Unidad de HandlerM;
interfaz
usos
Windows, ActiveX, ComObj, ShlObj, Diálogos;
tipo
TSearchEngine = class (TComObject, IShellExtInit, IContextMenu)
protegidas
() IShellExtInit
función IShellExtInit.Initialize = SEIInitialize;/ / Evitar el compilador de alerta
función SEIInitialize (pidlFolder: PItemIDList; lpdobj: IDataObject;
hKeyProgID: HKEY): HRESULT; stdcall;
() IContextMenu
QueryContextMenu función (Menú: HMENU; indexMenu, idCmdFirst, idCmdLast,
uFlags: UINT): HRESULT; stdcall;
InvokeCommand función (var lpici: TCMInvokeCommandInfo): HRESULT; stdcall;
funciónGetCommandString (idCmd, uType: UINT; pwReserved: PUINT;
pszName: LPSTR; cchMax: UINT): HRESULT; stdcall;
final;
const
Class_SearchEngine: TGUID = "(B8091A44-1F5E-4EFE-8F26-194ACBDE4465) ';
aplicación
ComServ usos, SysUtils, ShellApi, Secretaría;
función TSearchEngine.SEIInitialize (pidlFolder: PItemIDList; lpdobj: IDataObject;
hKeyProgID: HKEY): HRESULT;
empezar
Result: = noerror;
final;
TSearchEngine.QueryContextMenu función (Menú: HMENU; indexMenu, idCmdFirst,
idCmdLast, uFlags: UINT): HRESULT;
empezar
Resultado: = 0;
final;
TSearchEngine.InvokeCommand función (var lpici: TCMInvokeCommandInfo): HRESULT;
empezar
/ / ingrese su código aquí
ShowMessage ( 'Ejecutado');
Result: = noerror;
final;
función TSearchEngine.GetCommandString (idCmd, uType: UINT; pwReserved: PUINT;
pszName: LPSTR; cchMax: UINT): HRESULT;
empezar
if (idCmd = 0) entonces
empezar
if (uType = GCS_HELPTEXT) y luego
/ / Retorno cadena de ayuda para el elemento de menú
StrCopy (pszName, "Buscar el documento ');
Result: = noerror;
final
algo más
Result: = E_INVALIDARG;
final;
tipo
TSearchEngineFactory = class (TComObjectFactory)
público
procedimiento UpdateRegistry (Registro: Boolean); override;
final;
procedimiento CreateKey (const clave, VALUENAME, Valor: string);
var
Handle: HKEY;
Estatuto, Disposición: Integer;
empezar
Situación: = RegCreateKeyEx (HKEY_LOCAL_MACHINE, PChar (Key), 0,'',
REG_OPTION_NON_VOLATILE, KEY_READ o KEY_WRITE, nil, Handle,
Disposición @);
Si el estado = 0 then
empezar
RegSetValueEx (Handle, PChar (VALUENAME), 0, REG_SZ,
PChar (Value), Longitud (valor) + 1);
RegCloseKey (Handle);
final;
final;
procedimiento DeleteKey (const Clave: string);
empezar
RegDeleteKey (HKEY_LOCAL_MACHINE, PChar (clave));
final;
procedimiento TSearchEngineFactory.UpdateRegistry (Registro: Boolean);
var
ClassID: string;
Nombre de fichero: array [0 .. MAX_PATH] de Char;
empezar
Registro entonces si
empezar
heredado UpdateRegistry (Registro);
ClassID: = GUIDToString (Class_SearchEngine);
GetModuleFileName (hInstance, nombre de archivo, SizeOf (FileName));
CreateKey ("Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ '+
"FindExtensions \ Estático \ SearchHandler ','', ClassID);
CreateKey ( 'Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \' +
"FindExtensions \ Estático \ SearchHandler \ 0 ','',' Uso de Delphi ... ');
CreateKey ("Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ '+
"FindExtensions \ Estático \ SearchHandler \ 0 \ DefaultIcon ','', el nombre del archivo +', 0 ');
final
algo más
empezar
DeleteKey ( 'Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \' +
FindExtensions\Static\SearchHandler\0\DefaultIcon');"Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ '+
DeleteKey(
"FindExtensions \ Estático \ SearchHandler \ 0 ');
DeleteKey ( 'Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \' +
"FindExtensions \ Estático \ SearchHandler ');
heredado UpdateRegistry (Registro);
final;
final;
inicialización
TSearchEngineFactory.Create (ComServer, TSearchEngine, Class_SearchEngine,
'', "Delphi Search Engine Ejemplo", ciMultiInstance,
tmApartment);
final.

Delicious
Digg
Google
Yahoo