Extensão do namespace de Shell: Permitindo a busca profunda
Vista geral
De meus bornes passados sobre executar seu próprio namespace de Shell, houve algumas perguntas grandes afixadas por leitores. Muita destes stem do fato que o exemplo do namespace é razoavelmente simples que não executa todo o comportamento que é possível no explorador. Isto foi feito para focalizar nas etapas do núcleo em começar um namespace trabalhando executado. Ainda, há algumas etapas que extra você pode fazer exame que não requerem demasiado mais coding em sua parte adicionar umas características mais úteis. Uma pergunta no detalhe que vem acima completamente é frequentemente como permitir profundamente procurarar em seu namespace.
Você observará do exemplo existente do namespace que se você incorporar um termo da busca à caixa da busca no explorador, a busca filtra somente os artigos que estão atualmente na vista. Não procurara nos dobradores. Abaixo nas imagens, nós tentamos procurarar por “dois” na caixa da busca que resulta somente em 1 artigo. Assim, os dobradores secundários não eram incluídos.
Que um implementer do namespace tem que fazer a fim incluir dobradores secundários em seus resultados da busca do namespace? Isto é realmente razoavelmente simples.
Executando IShellFolderViewCB e IFolderViewSettings
Em nosso código precedente, nós não executamos IShellFolderViewCB para nosso namespace. Isto permite que seu namespace seja notificado dos eventos associados com a vista. Uma execução de IShellFolderViewCB pode ser especificada em sua chamada a SHCreateShellFolderView. Isto é opcional e previamente nós éramos justos passando o ZERO para este. Nós necessitamos criar uma classe essa instrumentos IShellFolderViewCB as well as IFolderViewSettings. Para nossa execução de IFolderViewSettings, nós necessitamos somente fornecer um alimentador para GetFolderFlags método. É com este método que nós notificamos Shell que nós queremos executar buscas profundas dentro de nosso namespace.
IFACEMETHODIMP CFolderViewCB:: GetFolderFlags (*pfolderMask do __out FOLDERFLAGS, *pfolderFlags do __out FOLDERFLAGS)
{
se (pfolderMask)
{
*pfolderMask = FWF_USESEARCHFOLDER;
}
se (pfolderFlags)
{
*pfolderFlags = FWF_USESEARCHFOLDER;
}
S_OK do retorno;
}
Como você pode ver da execução acima de GetFolderFlags, nós importamo-nos somente para notificar Shell da bandeira de FWF_USESEARCHFOLDER. Isto diz a Shell que nosso namespace deve usar o dobrador da busca para executar o empilhamento e procurarar. Você poderia também especifique outras bandeiras para modificar a aparência e o comportamento de seu namespace.
O código modificado para esta amostra é ligado abaixo.
Você observará que a execução de IShellFolderViewCB e de IFolderViewSettings é rather escassa - a maioria de retorno justo E_NOTIMPL dos métodos porque nós não os estamos usando aqui. 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














