Windows Search Engine

Implementing Shell Søk Handler bruker Delphi
Shell støtter flere søke verktøy som tillater brukere å finne navne gjenstander som filer eller skrivere. Du kan opprette en egendefinert søkemotor og gjøre den tilgjengelig for brukerne ved å implementere og registrere en søkehåndterer.
Brukere har to måter å velge en søkemotor. Den første måten er fra Start-menyen. Med systemer tidligere enn Microsoft Windows 2000, velger Finn-kommandoen på Start-menyen viser en undermeny av de tilgjengelige søkemotorer. Med Windows 2000 og senere, er Start-menyen Finn-kommandoen omdøpt Search.
Brukere kan også starte et søk fra Windows Utforsker. På systemer tidligere enn Windows 2000, klikker de på Finn-kommandoen på Verktøy-menyen for å vise hovedsak den samme menyen som den ene i forbindelse med Start-menyen. Men Windows Explorer for Windows 2000 håndterer søkemotorer på en helt annen måte. I stedet for å håndtere søkemotorer som en undermeny i Verktøy-menyen, er det nå en Søk-knappen på verktøylinjen. Ved å klikke på denne knappen åpner Explorer barens søkeruten
Følgende eksempel viser hvordan man implementerer Shell Søk Handler bruker Borland Delphi. Som enhver Shell Extension må det iverksettes som i-prosessen Component Object Model (COM) objekt. Det må tilordnes en globalt unik identifikator (GUID) og registreres med regsvr32.exe
bibliotek
Search; bruker
comserv, HandlerM i
'HandlerM.pas '; {$ R * res}
eksporten
DllGetClassObject, DllCanUnloadNow, DllRegisterServer, DllUnregisterServer;beginend
.{***************************************************************************** Navn: TSearchEngine Forfatter: Perevoznyk Serhiy Beskrivelse: Shell Søk Handler ************************************** ***************************************}
enhet Anmeldelser HandlerM; interfaceuses
Windows, ActiveX, ComObj, ShlObj, Dialoger; skriv
TSearchEngine = klasse plakater (TComObject, IShellExtInit, IContextMenu) beskyttet
< i> {IShellExtInit}
funksjon
IShellExtInit.Initialize = SEIInitialize; //Unngå kompilatoren advarsel
funksjon
SEIInitialize (pidlFolder: PItemIDList; lpdobj: IDataObject; hKeyProgID: HKEY): hresult; STDCALL
; {IContextMenu}
funksjon
QueryContextMenu (Meny: HMENU; indexMenu, idCmdFirst, idCmdLast, uFlags: UINT): hresult; STDCALL
; funksjon
InvokeCommand ( Var
lpici: TCMInvokeCommandInfo): hresult; STDCALL
; funksjon
GetCommandString (idCmd, uType: UINT; pwReserved: Puint; pszName: LPSTR; cchMax: UINT): hresult; STDCALL
; end
; konst
Class_SearchEngine: TGUID = {B8091A44-1F5E-4EFE-8F26-194ACBDE4465}; implementationuses
comserv, SysUtils, ShellApi, Registry; funksjon
TSearchEngine.SEIInitialize (pidlFolder: PItemIDList; lpdobj: IDataObject; hKeyProgID: HKEY): hresult; begynne
Resultat: = noerror; end
; funksjon
TSearchEngine.QueryContextMenu (Meny: HMENU; indexMenu, idCmdFirst, idCmdLast, uFlags: UINT): hresult; begynne
Resultat: = 0; end
; funksjon
TSearchEngine.InvokeCommand ( Var
lpici: TCMInvokeCommandInfo): hresult; begynne
//angi koden her
ShowMessage ('Utført'); Resultat: = noerror; end
; funksjon
TSearchEngine.GetCommandString (idCmd, uType: UINT; pwReserved: Puint; pszName: LPSTR; cchMax: UINT): HRESULT; begynne hvis product: (idCmd = 0) deretter begynne hvis plakater (uType = GCS_HELPTEXT) deretter
//gjengjeld hjelpe streng for menyvalget
StrCopy (pszName, 'Finn dokument '); Resultat: = noerror; end annet
Resultat: = E_INVALIDARG; end
; skriv
TSearchEngineFactory = klasse plakater (TComObjectFactory) offentlig prosedyre
UpdateRegistry ( Registrer Bilde: Boolean); styre
; end
; prosedyre
CreateKey ( konst
Key, Valuename, Verdi: string
); Var
Handle: HKEY; Status, Disposition: Integer; begynne
Status: = RegCreateKeyEx (HKEY_LOCAL_MACHINE, PChar (Key), 0, '', REG_OPTION_NON_VOLATILE, KEY_READ eller
KEY_WRITE, nil
, Håndtak,Disposition); hvis
Status = 0 deretter begynne
RegSetValueEx (Håndtak, PChar (Valuename), 0, REG_SZ, PChar (verdi), Lengde (Verdi) + 1); RegCloseKey (Handle); end
; end
; prosedyre
DeleteKey ( konst
Key: string
); begynne Anmeldelser RegDeleteKey (HKEY_LOCAL_MACHINE, PChar (Key)); end
; prosedyre
TSearchEngineFactory.UpdateRegistry ( Registrer Bilde: Boolean); Var
ClassID: < b> string
; Filename: rekke product: [0..MAX_PATH] av
Char; begynne hvis Register deretter begynner arvet
UpdateRegistry ( Registrer
); ClassID: = GUIDToString (Class_SearchEngine); GetModuleFileName (hInstance, Filename, sizeof (Filename)); CreateKey ('Software \\ Microsoft \\ Windows \\ Currentversion \\ Explorer \\' + 'FindExtensions \\ Static \\ Search', '', ClassID); CreateKey ('Software \\ Microsoft \\ Windows \\ Currentversion \\ Explorer \\' + 'FindExtensions \\ Static \\ Search \\ 0', '', 'Bruke Delphi ...'); CreateKey ('Software \\ Microsoft \\ Windows \\ Currentversion \\ Explorer \\' + 'FindExtensions \\ Static \\ Search \\ 0 \\ DefaultIcon', '', Filename + ", 0 '); end annet begynne
DeleteKey ('Software \\ Microsoft \\ Windows \\ Currentversion \\ Explorer \\' + 'FindExtensions \\ Static \\ Search \\ 0 \\ DefaultIcon'); DeleteKey ('Software \\ Microsoft \\ Windows \\ Currentversion \\ Explorer \\' + 'FindExtensions \\ Static \\ Search \\ 0'); DeleteKey ('Software \\ Microsoft \\ Windows \\ Currentversion \\ Explorer \\' + 'FindExtensions \\ Static \\ Search'); arvet
UpdateRegistry ( Registrer
); end
; end
; initialisering
TSearchEngineFactory.Create (COMSERVER, TSearchEngine, Class_SearchEngine, '', 'Delphi Search Engine Eksempel' ciMultiInstance, tmApartment); end
.