Simgeler, önizlemeler ve kısayol menüleri ekleme

Aramalar sırasında verilerinizin dizine eklendiğinden ve kullanıcıya doğru şekilde sunulduğundan emin olmak için, Kabuk veri depolarını (Kabuk Ad Alanı Uzantıları olarak da bilinir) ve dosya türü işleyicilerini (Kabuk uzantıları, uzantı işleyicileri veya Kabuk uzantısı işleyicileri olarak da bilinir) uygulamanız gerekir.

Bu konuda aşağıdaki arabirimler açıklanmaktadır:

Dosya türü işleyicilerini uygulama

Bu Kabuk uzantıları veya dosya türü işleyicileri kullanıcılarınıza aşağıdaki Kabuk deneyimlerini sağlar:

  • Sonuçlar görünümünde öğe türünüz için belirli bir simge görüntülenir.
  • Sonuç görünümü, kullanıcı öğeyi seçtiğinde öğenin önizlemesini görüntüler.
  • Kullanıcılar, dosyayı açma gibi olayları başlatmak için öğelere çift tıklayabilir.
  • Kullanıcılar bir kısayol (bağlam) menüsüne erişmek için öğelere sağ tıklayabilir.
  • Kullanıcılar öğeleri sürükleyip bırakabilir.

Tüm Bileşen Nesne Modeli (COM) nesneleri gibi dosya türü işleyicileri de IUnknown arabirimini ve sınıf fabrikasını uygulamalıdır.

Windows XP veya önceki sürümlerinde işleyiciler de şunları uygulamalıdır:

Windows Vista'da IPersistFile Arabirimi ve IShellExtInit Arabirimi, Shell'in işleyiciyi başlatması için aşağıdaki üç arabirimle değiştirildi:

Makul bir kullanıcı deneyimi sağlamak için protokol işleyicinizle bir Shell veri deposu sağlamanız gerekir. Bu veri deposu daha sonra simge işleyicileri, kısayol menüsü işleyicileri, önizleme işleyicileri vb. için "fabrika" görevi görür. IPersist Arabirimi ve IPersistFolder Arabirimi için, IShellFolder Arabirimi'nin en az uygulamaları gereklidir. Ve ayrıca IContextMenu ve IExtractIconiçin en az bir IShellFolder Arabirimi uygulaması gereklidir.

Not

IPersist, IPersistFolder ve IShellFolderiçin aynı sınıf tanımlayıcısı (CLSID) uygulanmalıdır.

 

Protokol işleyicisini desteklemek üzere kabuk veri deposu oluşturma hakkında daha fazla bilgi için bkz. Temel Klasör Nesne Arabirimlerini Uygulama.

IPersist

IPersist arabirimi, sistemde kalıcı olarak depolanabilen bir nesnenin CLSID'sini sağlamak üzere tasarlanan GetClassID tek yöntemini tanımlar.

Yöntem Açıklama
GetClassID Shell veri deposu nesnesinin CLSID'sini döndürür

 

IPersistFolder

IPersistFolder arabirimi, Shell klasör nesnelerini başlatmak için kullanılır. IPersist'den türetilen bu arabirimin uygulanması, klasörün Shell ad alanında nerede olduğu nasıl anlatıldığıdır. Bu arabirimi doğrudan kullanmazsınız. Bir Shell klasör nesnesi başlatırken IShellFolder::BindToObject Metodu dosya sistemi uygulaması tarafından kullanılır.

Yöntem Açıklama
Başlat Shell klasör nesnesine geçirilen bilgilere göre kendisini başlatmasını ve S_OK döndürmesini sağlar

 

IShellFolder

klasörleri yönetmek için IShellFolder Arabirimi arabirimi kullanılır ve bir protokol işleyicisi için uygulanan simge ve bağlam arabirimlerinin Windows Search sonuçları kullanıcı arabiriminde doğru şekilde davranması için kısmi bir uygulama gerekir. Gereken işlevlerin çoğu GetUIObjectOf yöntemiyle kullanıma sunulur. Bu yöntem, IExtractIcon ve IContextMenu arabirimlerini sorgulamak için bir eklentiyi etkinleştirir.

IShellFolder Arabirimi arabirimi URL'ler yerine PIDL'leri kullanır. Tam bir Shell veri deposu gereksinimlerinin aksine, eklentiler yalnızca URL'yi içeren basit bir IDL yapısı kullanabilir.

Aşağıdaki yöntemler IShellFolder Arayüzü uygulanmalıdır. Bu yöntemlerden beşi en az uygulama gerektirir.

Yöntem Açıklama
BindToObject E_NOTIMPL döndürür
BindToStorage E_NOTIMPL döndürür
CreateViewObject E_NOTIMPL döndürür
SetNameOf E_NOTIMPL döndürür
ParseDisplayName URL'yi PIDL yapısına dönüştürür
Karşılaştırma Kimlikleri İki PIDL değerini karşılaştırır
GetDisplayNameOf PIDL'nin URL'sini döndürür
GetUIObjectOf Bu yöntem, IUnknown::QueryInterface Metodubenzerdir. Bir simge istenirse, arayan IID_IExtractIcon ister; bir kısayol menüsü istenirse, arayan IID_IContextMenu ister

 

IShellFolder klasörleri listelemek için kullanılmaz. Bu, bir klasörün görünen adının fiziksel URL olacağı anlamına gelir. Bu, gelecekte değişebilir.

IContextMenu

Windows Search kullanıcıya sonuçları gösterdiğinde, kullanıcı bir öğeye sağ tıklayabilir ve IContextMenu arabiriminiz tarafından tanımlanan bir kısayol menüsünü görebilir. Kısayol menüleri bağlam menüleri olarak da bilinir.

Bağlam menüsündeki varsayılan eylem, öğeye çift tıklandığında gerçekleştirilen eylemle aynıdır. İlgili IShellFolder veya IContextMenu arabirimleri olmadan, çift tıklama olayının varsayılan davranışı URL'yi ShellExecute İşlevi işlevine bağımsız değişken olarak geçirmektir.

Kısayol menü işleyicileri oluşturma hakkında daha fazla bilgi için Oluşturma Bağlam Menüsü İşleyicileri ve örnek kod için Örnek: Protokol İşleyicileri için Kabuk Uzantıları bakın.

IExtractIcon

IExtractIcon, protokol işleyiciniz tarafından sağlanan PIDL'deki URL'yi temel alarak Windows Search kullanıcı arabirimi için bir simge alır.

Simge işleyicileri oluşturma hakkında daha fazla bilgi için Simge İşleyicileri Oluşturma başvurun ve örnek kod için Örnek: Protokol İşleyicileri için Kabuk Uzantıları başvurun.

IPreviewHandler

IPreviewHandler, Windows Gezgini'nde seçili öğenin zengin bir önizlemesini işler. Önizlemeler Windows Search 4.0'da veya Windows Masaüstü Arama 3.x ile Windows Vista'da kullanılabilir.

Özel önizleme işleyicisi oluşturmak için:

  1. Önizleme İşleyicileri'nde sağlanan yönergeleri izleyerek IStreamalan bir IPreviewHandler uygulayın.

  2. Önizleme işleyicinizi kaydedin:

    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. URL'niz için bir Shell klasörü uygulamak için aşağıdaki iki adımı tamamlayın:

    1. IShellFolder::GetUIObjectOf Methodiçinde, aşağıdaki kod örneğinde gösterildiği gibi IQueryAssociations işleyip Shell öğeleriniz için ilişkilendirmenizi döndürin.

      CComPtr<IQueryAssociations> spqa;
      AssocCreate(CLSID_QueryAssociations, __uuidof(IQueryAssociations), &spqa);
      spqa->Init(0, L"Your_Object_Type", NULL, NULL);
      spqa->QueryInterface(riid, ppvReturn);
      
    2. Shell, önizleme işleyicisini başlatmak için Kabuk klasörünüzü veri akışı için sorguladıktan sonra IShellFolder::BindToObject Metodu yönteminize gidin, IID_IStream işleyin ve URL'nize bir IStream döndürin.

Dosya türünüz için mevcut bir önizleme işleyicisini yeniden kullanmak için şu iki adımı izleyin:

  1. <Your_PreviewHandler_GUID>yerine mevcut önizleme işleyicisinin CLSID'sini kullanarak bu önizleme işleyicisini dosya türünüz için kaydedin.
  2. Bir Shell klasörü uygulayın.

Önizleme işleyicileri oluşturma hakkında daha fazla bilgi için bkz. IPreviewHandler ve Preview Handlers.

Ek kaynaklar

kavramsal

Protokol İşleyicileri Geliştirme

Protokol İşleyicilerini Anlama

Değişiklik Dizinine Bildirme

Kod Örneği: Protokol İşleyicileri için Kabuk Uzantıları

Protokol İşleyicilerini Yükleme ve Kaydetme

Protokol İşleyicisi için Arama Bağlayıcısı Oluşturma

Hata Ayıklama Protokolü İşleyicileri