De Uitbreiding van Shell Namespace: Het toelaten van Diep Onderzoek
Overzicht
Van mijn afgelopen posten over het uitvoeren van uw eigen Shell Namespace, zijn er sommige grote vragen geweest die door lezers worden gepost. Veel van deze stammen uit het feit dat het voorbeeld Namespace vrij eenvoudig is in zoverre dat het alle gedrag niet uitvoert dat in Ontdekkingsreiziger mogelijk is. Dit werd gedaan zich op de kernstappen concentreren in het krijgen van het werken uitgevoerde Namespace. Maar toch zijn er een paar extra maatregelen u kunt treffen die teveel meer codage van uw kant niet vereisen om nuttigere eigenschappen toe te voegen. Één vraag in het bijzonder die omhoog vrij vaak komt is hoe te diep het zoeken in uw Namespace toe te laten.
U zult van het bestaande voorbeeld Namespace dat opmerken als u een onderzoekstermijn in het onderzoeksvakje in Ontdekkingsreiziger, de punten ingaat van onderzoeks slechts filters die momenteel in de mening zijn. Het zoekt niet in de omslagen. In de onderstaande beelden, proberen wij om naar „Twee“ in de onderzoeksdoos te zoeken die slechts in 1 punt resulteert. Aldus, waren de subomslagen niet inbegrepen.
Wat een uitvoerder Namespace moet om omvat subomslagen in hun resultaten van het namespaceonderzoek? Dit is eigenlijk vrij eenvoudig.
Het uitvoeren van IShellFolderViewCB en IFolderViewSettings
In onze vorige code, voerden wij geen uit IShellFolderViewCB voor onze Namespace. Dit laat uw Namespace toe om van gebeurtenissen worden meegedeeld verbonden aan de mening. Een implementatie van IShellFolderViewCB kan in uw vraag aan worden gespecificeerd SHCreateShellFolderView. Dit is facultatief en eerder waren wij enkel overgaan ONGELDIG voor dit. Wij moeten een klasse tot stand brengen die IShellFolderViewCB uitvoert evenals IFolderViewSettings. Voor onze implementatie IFolderViewSettings, moeten wij slechts een manager voor verstrekken GetFolderFlags methode. Het is door deze methode dat wij Shell meedelen dat wij diepe onderzoeken binnen onze Namespace willen uitvoeren.
IFACEMETHODIMP CFolderViewCB:: GetFolderFlags (__out FOLDERFLAGS *pfolderMask, __out FOLDERFLAGS *pfolderFlags)
{
als (pfolderMask)
{
*pfolderMask = FWF_USESEARCHFOLDER;
}
als (pfolderFlags)
{
*pfolderFlags = FWF_USESEARCHFOLDER;
}
terugkeer S_OK;
}
Aangezien u van de bovengenoemde implementatie van GetFolderFlags kunt zien, geven wij slechts om Shell van de vlag mee te delen FWF_USESEARCHFOLDER. Dit vertelt Shell dat onze Namespace de Omslag zou moeten gebruiken van het Onderzoek voor het uitvoeren van het stapelen en het zoeken. U kon ook specificeer andere vlaggen om de verschijning en het gedrag van uw namespace te wijzigen.
De gewijzigde code voor deze steekproef is hieronder verbonden.
U zult opmerken dat de implementatie van IShellFolderViewCB en IFolderViewSettings eerder dun is - de meeste methodes keren enkel E_NOTIMPL terug aangezien wij hen niet hier gebruiken. 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














