Выдвижение Namespace раковины: Включать глубокий поиск
Обзор
От моих прошлых столбов о снабжать ваш собственный Namespace раковины, были некоторые большие вопросы вывешенные читателями. Много из этих stem from факт что пример Namespace справедливо просто в что он не снабжает все поведение по возможности в исследователе. Это было сделано для того чтобы сфокусировать на шагах сердечника в получать работая Namespace после того как оно снабжено. Пока, будут немного экстренных, котор вы можете предпринять которые не требуют, что too much больше кодирвоания на вашей части добавляет более полезные характеристики. Один вопрос в частности come up довольно часто как включить глубоко искать в вашем Namespace.
Вы заметите от existing примера Namespace что если вы вписываете термин поиска в коробку поиска в исследователе, то поиск только фильтрует детали которые находятся в настоящее время в взгляде. Оно не ищет в скоросшиватели. В ниже изображениях, мы пытаемся искать для «2» в коробке поиска которая только приводит к в 1 детале. Таким образом, sub скоросшиватели не были включенны.
Implementer Namespace должен сделать для того чтобы включить sub скоросшиватели в их результаты поиска namespace? Это фактическ справедливо просто.
Снабжать IShellFolderViewCB и IFolderViewSettings
В нашем ранее Кодем, мы не снабдили IShellFolderViewCB для нашего Namespace. Это позволяет ваш Namespace быть сообщенным случаев связанных с взглядом. Вставку IShellFolderViewCB можно определить в вашем звоноке к SHCreateShellFolderView. Это опционно и ранее мы были справедливы проходящ NULL для этого. Нам нужно создать тип тот инструменты IShellFolderViewCB также, как IFolderViewSettings. Для нашей вставкы IFolderViewSettings, нам только нужно предусмотреть укротитель для GetFolderFlags метод. Оно через этот метод что мы сообщаем раковину что мы хотим выполнить глубокие поиски внутри наш Namespace.
IFACEMETHODIMP CFolderViewCB:: GetFolderFlags (*pfolderMask __out FOLDERFLAGS, *pfolderFlags __out FOLDERFLAGS)
{
если (pfolderMask), то
{
*pfolderMask = FWF_USESEARCHFOLDER;
}
если (pfolderFlags), то
{
*pfolderFlags = FWF_USESEARCHFOLDER;
}
возвращенное S_OK;
}
По мере того как вы можете увидеть от вышеуказанной вставкы GetFolderFlags, мы только заботим для того чтобы сообщить раковину флага FWF_USESEARCHFOLDER. Это говорит раковине что наш Namespace должен использовать скоросшиватель поиска для выполнять штабелировать и искать. Вы смогли также определите другие флаги доработать возникновение и поведение вашего namespace.
Доработанное Кодий для этого образца соединено ниже.
Вы заметите что вставка IShellFolderViewCB и IFolderViewSettings довольно sparse - большинств возвращение E_NOTIMPL методов справедливое по мере того как мы не используем их здесь. 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














