Estensione del namespace di Shell: Permettere ricerca profonda
Descrizione
Dai miei alberini passati circa effettuare il vostro proprio namespace di Shell, ci sono stati alcune domande grandi inviate dai lettori. Molti di questi provengono dal fatto che l'esempio del namespace è ragionevolmente semplice in quanto non effettua tutto il comportamento che sia possibile in esploratore. Ciò è stata fatta per mettere a fuoco sui punti di nucleo nell'ottenere un namespace di funzionamento effettuato. Tuttavia, ci sono alcune misure che supplementari potete prendere che non richiedono troppa più codificazione sulla vostra parte aggiungere le caratteristiche più utili. Una domanda in particolare che viene in su abbastanza è spesso come permettere in profondità la ricerca nel vostro namespace.
Noterete dall'esempio attuale del namespace che se fornite un termine di ricerca nella scatola di ricerca in esploratore, la ricerca filtra soltanto gli articoli che sono attualmente nella vista. Non cerca nei dispositivi di piegatura. Sotto nelle immagini, proviamo a cercare “due„ nella scatola di ricerca che provoca soltanto 1 articolo. Quindi, i dispositivi di piegatura secondari non erano inclusi.
Che cosa un implementer del namespace deve fare per includere i dispositivi di piegatura secondari nei loro risultati di ricerca del namespace? Ciò è realmente ragionevolmente semplice.
Effettuare IShellFolderViewCB e IFolderViewSettings
Nel nostro codice precedente, non abbiamo effettuato IShellFolderViewCB per il nostro namespace. Ciò permette che il vostro namespace sia comunicato degli eventi connessi con la vista. Un'esecuzione di IShellFolderViewCB può essere specificata nella vostra chiamata a SHCreateShellFolderView. Ciò è facoltativa e precedentemente eravamo giusti passando la POSIZIONE DI SEGNALE MINIMO per questo. Dobbiamo generare un codice categoria quel strumenti IShellFolderViewCB così come IFolderViewSettings. Per la nostra esecuzione di IFolderViewSettings, dobbiamo soltanto fornire ad un alimentatore per GetFolderFlags metodo. È con questo metodo che informiamo Shell che desideriamo effettuare le ricerche profonde all'interno del nostro namespace.
IFACEMETHODIMP CFolderViewCB:: GetFolderFlags (*pfolderMask del __out FOLDERFLAGS, *pfolderFlags del __out FOLDERFLAGS)
{
se (pfolderMask)
{
*pfolderMask = FWF_USESEARCHFOLDER;
}
se (pfolderFlags)
{
*pfolderFlags = FWF_USESEARCHFOLDER;
}
S_OK di ritorno;
}
Come potete vedere dalla suddetta esecuzione di GetFolderFlags, ci preoccupiamo soltanto per informare Shell della bandierina di FWF_USESEARCHFOLDER. Ciò dice a Shell a che il nostro namespace dovrebbe usare il dispositivo di piegatura di ricerca per realizzare l'impilamento e la ricerca. Potreste inoltre specifichi altre bandierine per modificare l'apparenza ed il comportamento del vostro namespace.
Il codice modificato per questo campione è collegato sotto.
Noterete che l'esecuzione di IShellFolderViewCB e di IFolderViewSettings è piuttosto sparsa - la maggior parte del ritorno giusto E_NOTIMPL di metodi poichè non stiamo usandoli qui. You can implement these yourself if you see the need to extend your code.
Now that we have notified the Shell to use the Search Folder, we can perform deep searches within our Namespace. When we perform the same search we did previously, we now get the following results:
This Namespace simply generates 10 virtual items to a default depth of 5. The Search enumerates the contents of the Namespace to that depth. It should also be called out that we had to implement our namespace's ParseDisplayName method in order for our namespace to function in the Search folder.
*Please note that the method described here only works with the default shell view (Defview). It is not supported for custom IShellView implementations.
Building the FolderView SDK Sample
- To build the FolderViewImpl sample, be sure to download and install the Windows SDK.
- Download the modified FolderView SDK sample
- Launch FolderViewImpl.sln in Visual Studio (The solution file is for Visual Studio 2008)
- Open the properties for the project
- Add a path to the SDK includes to the C/C++ - General page
- Add a path to the SDK libs to the Linker – General page
- Build
Installing the FolderView SDK Sample
- Once you have built the sample, copy the FolderViewImpl.dll and FolderViewImpl.propdesc to the same directory
- From an elevated cmd window, regsvr32 FolderViewImpl.dll
- Restart explorer
- Open explorer to Computer
- There should be a list item named “FolderView SDK Sample”
Written by chrdavis. Read more great feeds at is source WEBSITE
no comments.
Read more articles on namespace and otherSoftware and extension and Search and Organize and shell and Coding and Programming and vista and search and API and Windows Vista.
- [+] Digg: Feature this article
- [+] Del.icio.us: Bookmark this article
- [+] Furl: Bookmark this article














