Udostępnij za pośrednictwem


Dodawanie ikon, podglądów i menu skrótów

Aby upewnić się, że dane są indeksowane i wyświetlane poprawnie dla użytkownika podczas wyszukiwania, należy zaimplementować magazyny danych powłoki (znane również jako rozszerzenia przestrzeni nazw powłoki ) oraz programy obsługi typów plików (znane również jako rozszerzenia powłoki, programy obsługi rozszerzeń lub programy obsługi rozszerzeń powłoki).

W tym temacie opisano następujące interfejsy:

Implementowanie programów obsługi typów plików

Te rozszerzenia powłoki lub programy obsługi typów plików zapewniają użytkownikom następujące funkcjonalności powłoki:

  • W widoku wyników zostanie wyświetlona określona ikona typu elementu.
  • Widok wyników wyświetla podgląd elementu, gdy użytkownik wybierze element.
  • Użytkownicy mogą kliknąć dwukrotnie elementy, aby zainicjować zdarzenia, takie jak otwieranie pliku.
  • Użytkownicy mogą kliknąć prawym przyciskiem myszy elementy, aby uzyskać dostęp do menu skrótów (kontekstowych).
  • Użytkownicy mogą przeciągać i upuszczać elementy.

Podobnie jak wszystkie obiekty modelu obiektów składowych (COM), programy obsługi typów plików muszą implementować interfejs IUnknown i fabrykę klas.

W systemie Windows XP lub starszym programy obsługi powinny również implementować:

W systemie Windows Vista interfejsy IPersistFile i IShellExtInit zostały zastąpione przez następujące trzy interfejsy w celu inicjacji procedury obsługi powłoki:

Aby zapewnić odpowiednie doświadczenie użytkownika, musisz udostępnić magazyn danych powłoki wraz z programem obsługi protokołów. Ten magazyn danych służy następnie jako "fabryka" dla procedur obsługi ikon, programów obsługi menu skrótów, procedur obsługi podglądu itd. Minimalna implementacja interfejsu IPersist interfejsu IPersist i interfejsu IPersistFolder jest wymagana interfejsu IShellFolder, a minimalna implementacja interfejsu IShellFolder jest wymagana dla interfejsu IContextMenu i IExtractIcon.

Notatka

Ten sam identyfikator klasy (CLSID) należy zaimplementować dla IPersist, IPersistFolder i IShellFolder.

 

Aby uzyskać więcej informacji na temat tworzenia magazynu danych powłoki w celu obsługi protokołu, zobacz Implementowanie podstawowych interfejsów obiektów folderów.

IPersist

Interfejs IPersist definiuje pojedynczą metodę GetClassID, która ma na celu podanie identyfikatora CLSID obiektu, który może być przechowywany w systemie w sposób trwały.

Metoda Opis
GetClassID Zwraca identyfikator CLSID obiektu magazynu danych powłoki

 

IPersistFolder

Interfejs IPersistFolder służy do inicjowania obiektów folderów systemowych. Implementacja tego interfejsu, który pochodzi z IPersist, to sposób, w jaki folder dowiaduje się, gdzie znajduje się w przestrzeni nazw powłoki. Nie używasz tego interfejsu bezpośrednio. Jest on używany przez implementację systemu plików IShellFolder::BindToObject Method podczas inicjowania obiektu folderu shell.

Metoda Opis
Inicjalizacja Poleca obiektowi folderu Shell, aby zainicjował się na podstawie przekazanych informacji, i zwraca S_OK.

 

IShellFolder

Interfejs IShellFolder Interface służy do zarządzania folderami, a częściowa implementacja jest wymagana, aby interfejsy ikon i kontekstu zaimplementowane dla programu obsługi protokołu zachowywały się poprawnie w interfejsie użytkownika wyników wyszukiwania systemu Windows. Większość wymaganych funkcji jest uwidaczniana za pośrednictwem metody GetUIObjectOf. Ta metoda umożliwia dodatkowi wykonywanie zapytań dotyczących interfejsów IExtractIcon i IContextMenu.

Interfejs IShellFolder używa PIDL zamiast adresów URL. W przeciwieństwie do wymagań pełnego przechowywania danych w powłoce, dodatki mogą używać prostej struktury IDL zawierającej tylko URL.

Należy zaimplementować następujące metody interfejsu IShellFolder. Pięć z tych metod wymaga minimalnej implementacji.

Metoda Opis
BindToObject Zwraca E_NOTIMPL
BindToStorage Zwraca E_NOTIMPL
CreateViewObject Zwraca E_NOTIMPL
SetNameOf Zwraca E_NOTIMPL
ParseDisplayName Konwertuje adres URL na strukturę PIDL
CompareIDs Porównuje dwie wartości PIDL
GetDisplayNameOf Zwraca adres URL dla identyfikatora PIDL
GetUIObjectOf Ta metoda jest podobna do metody IUnknown::QueryInterface Method. Jeśli zażądano ikony, obiekt wywołujący prosi o IID_IExtractIcon; jeśli zażądano menu skrótów, obiekt wywołujący prosi o IID_IContextMenu.

 

IShellFolder nie jest używany do wyliczania folderów. Oznacza to, że nazwa wyświetlana folderu będzie fizycznym adresem URL. Może to ulec zmianie w przyszłości.

IContextMenu

Gdy usługa Windows Search wyświetla użytkownikowi wyniki, użytkownik może kliknąć prawym przyciskiem myszy element i wyświetlić menu skrótów zdefiniowane przez interfejs IContextMenu. Menu skrótów są również nazywane menu kontekstowymi.

Domyślna akcja w menu kontekstowym to ta sama akcja wykonywana po dwukrotnym kliknięciu elementu. Bez odpowiedniego interfejsu IShellFolder lub IContextMenu dla elementu, domyślne zachowanie zdarzenia dwukrotnego kliknięcia polega na przekazaniu adresu URL jako argumentu do funkcji ShellExecute.

Aby uzyskać więcej informacji na temat tworzenia procedur obsługi menu kontekstowego, zobacz Tworzenie procedur obsługi menu kontekstowego, oraz Przykład: Rozszerzenia powłoki dla programów obsługi protokołów, aby uzyskać przykładowy kod.

IExtractIcon

IExtractIcon pobiera ikonę interfejsu użytkownika usługi Windows Search na podstawie adresu URL w pliku PIDL dostarczonego przez program obsługi protokołu.

Aby uzyskać więcej informacji na temat tworzenia procedur obsługi ikon, zobacz Creating Icon Handlers (Tworzenie procedur obsługi ikon) i Sample: Shell Extensions for Protocol Handlers (Przykład: rozszerzenia powłoki dla procedur obsługi protokołów) dla przykładowego kodu.

IPreviewHandler

IPreviewHandler renderuje bogaty podgląd wybranego elementu w Eksploratorze Windows. Wersje zapoznawcze są dostępne w usłudze Windows Search 4.0 lub Windows Vista z funkcją Windows Desktop Search 3.x.

Aby utworzyć niestandardowy mechanizm podglądu:

  1. Zaimplementuj IPreviewHandler, który przyjmuje IStream, zgodnie z wytycznymi podanymi w "Preview Handlers".

  2. Zarejestruj program obsługi w wersji zapoznawczej:

    HKEY_CLASSES_ROOT\<Your_Object_Type>
    
    HKEY_CLASSES_ROOT\<Your_Object_Type>\ShellEx
    
    HKEY_CLASSES_ROOT\<Your_Object_Type>\ShellEx\{8895b1c6-b41f-4c1c-a562-0d564250836f}
       @ = {<Your_PreviewHandler_GUID>}
    
  3. Wykonaj następujące dwa kroki, aby zaimplementować folder Shell dla adresu URL:

    1. W IShellFolder::GetUIObjectOf Methodobsłuż IQueryAssociations i zwróć swoje skojarzenie dla elementów powłoki, jak pokazano w poniższym przykładzie kodu.

      CComPtr<IQueryAssociations> spqa;
      AssocCreate(CLSID_QueryAssociations, __uuidof(IQueryAssociations), &spqa);
      spqa->Init(0, L"Your_Object_Type", NULL, NULL);
      spqa->QueryInterface(riid, ppvReturn);
      
    2. Gdy powłoka wysyła zapytanie do folderu Shell dla strumienia danych, aby zainicjować obsługiwacz podglądu, przejdź do metody IShellFolder::BindToObject, obsłuż IID_IStream i zwróć IStream do twojego adresu URL.

Aby ponownie użyć istniejącej procedury obsługi w wersji zapoznawczej dla typu pliku, wykonaj następujące dwa kroki:

  1. Zarejestruj program obsługi w wersji zapoznawczej dla typu pliku przy użyciu identyfikatora CLSID istniejącego programu obsługi w wersji zapoznawczej zamiast programu <Your_PreviewHandler_GUID>.
  2. Zaimplementuj folderu Shell.

Aby uzyskać więcej informacji na temat tworzenia procedur obsługi w wersji zapoznawczej, zobacz IPreviewHandler i Preview Handlers.

Dodatkowe zasoby

Koncepcyjne

tworzenie programów obsługi protokołów

Zrozumienie Obsługi Protokółów

Powiadamianie o indeksie zmian

przykładowy kod : rozszerzenia powłoki dla programów obsługi protokołów

instalowanie i rejestrowanie programów obsługi protokołu

tworzenie łącznika wyszukiwania dla programu obsługi protokołu

programy obsługi protokołów debugowania