Votre meilleure source d'information et nouvelles environ secrets, logiciel et conducteurs sur l'Internet

ARTICLES de Vista PRINCIPAL 50 Vista VIDEOS Vista MOU AIDE de Vista

Prolongation de namespace de Shell : Permettre la recherche profonde


Vue d'ensemble

De mes poteaux passés au sujet de mettre en application votre propre namespace de Shell, il y a eu quelques grandes questions signalées par des lecteurs. Beaucoup de ces derniers proviennent du fait que l'exemple de namespace est assez simple parce qu'il ne met pas en application tout les comportement qui est possible dans l'explorateur. Ceci a été fait pour se concentrer sur les étapes de noyau pour obtenir un namespace fonctionnant mis en application. Cependant, il y a quelques mesures supplémentaires que vous pouvez prendre qui n'exigent pas de trop de plus de codage sur votre partie d'ajouter des dispositifs plus utiles. Une question en particulier qui est soulevée tout à fait est souvent comment permettre profondément la recherche dans votre namespace.

Vous noterez de l'exemple existant de namespace que si vous écrivez une limite de recherche dans la boîte de recherche dans l'explorateur, la recherche filtre seulement les articles qui sont actuellement dans la vue. Il ne recherche pas dans les chemises. Dans ci-dessous les images, nous essayons de rechercher « deux » dans la boîte de recherche qui a seulement comme conséquence 1 article. Ainsi, les chemises secondaires n'étaient pas incluses.

Recherche de filtre

Résultats de filtre - peu profonds

Queest-ce qu'un applicateur de namespace doit faire afin d'inclure les chemises secondaires dans leurs résultats de recherche de namespace ? C'est réellement assez simple.

Mettre en application IShellFolderViewCB et IFolderViewSettings

En notre code précédent, nous n'avons pas mis en application IShellFolderViewCB pour notre namespace. Ceci permet à votre namespace d'être avisé des événements liés à la vue. Une exécution d'IShellFolderViewCB peut être indiquée dans votre appel à SHCreateShellFolderView. C'est facultatif et précédemment nous étions justes passant la NULLE pour ceci. Nous devons créer une classe cette des instruments IShellFolderViewCB aussi bien que IFolderViewSettings. Pour notre exécution d'IFolderViewSettings, nous devons seulement fournir un traiteur pour GetFolderFlags méthode. C'est par cette méthode que nous informons Shell que nous voulons exécuter des recherches profondes dans notre namespace.

IFACEMETHODIMP CFolderViewCB : : GetFolderFlags (*pfolderMask de __out FOLDERFLAGS, *pfolderFlags de __out FOLDERFLAGS)

{

si (pfolderMask)

{

*pfolderMask = FWF_USESEARCHFOLDER ;

}

si (pfolderFlags)

{

*pfolderFlags = FWF_USESEARCHFOLDER ;

}

S_OK de retour ;

}

Comme vous pouvez voir de l'exécution ci-dessus de GetFolderFlags, nous nous inquiétons seulement pour informer Shell du drapeau de FWF_USESEARCHFOLDER. Ceci indique à Shell que notre namespace devrait employer la chemise de recherche pour effectuer l'empilement et la recherche. Vous pourriez également indiquez d'autres drapeaux pour modifier l'aspect et le comportement de votre namespace.

Le code modifié pour cet échantillon est lié ci-dessous. Vous noterez que l'exécution d'IShellFolderViewCB et d'IFolderViewSettings est plutôt clairsemée - la plupart de retour juste E_NOTIMPL de méthodes car nous ne les employons pas ici. 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:

deep search

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

  1. To build the FolderViewImpl sample, be sure to download and install the Windows SDK.
  2. Download the modified FolderView SDK sample
  3. Launch FolderViewImpl.sln in Visual Studio (The solution file is for Visual Studio 2008)
  4. Open the properties for the project
  5. Add a path to the SDK includes to the C/C++ - General page
  6. Add a path to the SDK libs to the Linker – General page
  7. Build

Installing the FolderView SDK Sample

  1. Once you have built the sample, copy the FolderViewImpl.dll and FolderViewImpl.propdesc to the same directory
  2. From an elevated cmd window, regsvr32 FolderViewImpl.dll
  3. Restart explorer
  4. Open explorer to Computer
  5. There should be a list item named “FolderView SDK Sample”

Popularity: 1%


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.

Related articles

No comments

There are still no comments on this article.

Leave your comment...

If you want to leave your comment on this article, simply fill out the next form:




You can use these XHTML tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong> .