Menambahkan Ikon, Pratinjau, dan Menu Pintasan

Untuk memastikan bahwa data Anda diindeks dan disajikan dengan benar kepada pengguna selama pencarian, Anda perlu menerapkan penyimpanan data Shell (juga dikenal sebagai Ekstensi Namespace Shell), dan penangan jenis file (juga dikenal sebagai ekstensi Shell, handler ekstensi, atau penangan ekstensi Shell).

Topik ini menjelaskan antarmuka berikut:

Menerapkan Penangan Tipe File

Ekstensi Shell atau penangan jenis file ini memberi pengguna Anda pengalaman Shell berikut:

  • Tampilan hasil menampilkan ikon tertentu untuk tipe item Anda.
  • Tampilan hasil menampilkan pratinjau item saat pengguna memilih item.
  • Pengguna dapat mengklik dua kali item untuk memulai peristiwa seperti membuka file.
  • Pengguna dapat mengklik kanan item untuk mengakses menu pintasan (konteks).
  • Pengguna dapat menyeret dan meletakkan item.

Seperti semua objek Model Objek Komponen (COM), penangan jenis file harus mengimplementasikan antarmuka IUnknown dan pabrik kelas.

Di Windows XP atau yang lebih lama, handler juga harus menerapkan:

Di Windows Vista, Antarmuka IPersistFile dan Antarmuka IShellExtInit digantikan oleh tiga antarmuka berikut bagi Shell untuk menginisialisasi handler:

Untuk memberikan pengalaman pengguna yang wajar, Anda harus menyediakan penyimpanan data Shell dengan penangan protokol Anda. Penyimpanan data tersebut kemudian berfungsi sebagai "pabrik" untuk penangan ikon, penangan menu pintasan, penangan pratinjau, dan sebagainya. Implementasi minimal Antarmuka IPersist dan Antarmuka IPersistFolder diperlukan oleh Antarmuka IShellFolder, dan implementasi minimal Antarmuka IShellFolder diperlukan untuk IContextMenu dan IExtractIcon.

Catatan

Pengidentifikasi kelas yang sama (CLSID) harus diimplementasikan untuk IPersist, IPersistFolder dan IShellFolder.

 

Untuk informasi selengkapnya tentang membuat penyimpanan data Shell untuk mendukung penangan protokol, lihat Menerapkan Antarmuka Objek Folder Dasar.

IPersist

Antarmuka IPersist mendefinisikan metode tunggal GetClassID, yang dirancang untuk menyediakan CLSID objek yang dapat disimpan terus-menerus dalam sistem.

Metode Deskripsi
GetClassID Mengembalikan CLSID dari objek penyimpanan data Shell

 

IPersistFolder

Antarmuka IPersistFolder digunakan untuk menginisialisasi objek folder Shell. Implementasi antarmuka ini, yang berasal dari IPersist, adalah bagaimana folder diberi tahu di mana berada di namespace Shell. Anda tidak menggunakan antarmuka ini secara langsung. Ini digunakan oleh implementasi sistem file dari Metode IShellFolder::BindToObject ketika menginisialisasi objek folder Shell.

Metode Deskripsi
Initialize Menginstruksikan objek folder Shell untuk menginisialisasi dirinya sendiri berdasarkan informasi yang diteruskan dan mengembalikan S_OK

 

IShellFolder

Antarmuka Antarmuka IShellFolder digunakan untuk mengelola folder, dan implementasi parsial diperlukan sehingga ikon dan antarmuka konteks yang diterapkan untuk penangan protokol akan bersifat benar di antarmuka pengguna hasil Pencarian Windows. Sebagian besar fungsionalitas yang diperlukan diekspos melalui metode GetUIObjectOf . Metode ini memungkinkan add-in untuk mengkueri antarmuka IExtractIcon dan IContextMenu .

Antarmuka Antarmuka IShellFolder menggunakan PIDL alih-alih URL. Berbeda dengan persyaratan penyimpanan data Shell lengkap, add-in dapat menggunakan struktur IDL sederhana yang hanya berisi URL.

Metode IShellFolder Interface berikut harus diimplementasikan. Lima metode ini membutuhkan implementasi minimal.

Metode Deskripsi
BindToObject Mengembalikan E_NOTIMPL
BindToStorage Mengembalikan E_NOTIMPL
CreateViewObject Mengembalikan E_NOTIMPL
SetNameOf Mengembalikan E_NOTIMPL
ParseDisplayName Mengonversi URL ke struktur PIDL
Bandingkan ID Membandingkan dua nilai PIDL
GetDisplayNameOf Mengembalikan URL untuk PIDL
GetUIObjectOf Metode ini mirip dengan Metode IUnknown::QueryInterface. Jika ikon diminta, pemanggil meminta IID_IExtractIcon; jika menu pintasan diminta, pemanggil meminta IID_IContextMenu

 

IShellFolder tidak digunakan untuk menghitung folder. Ini berarti bahwa nama tampilan folder akan menjadi URL fisik. Ini dapat berubah di masa depan.

IContextMenu

Saat Windows Search menampilkan hasil kepada pengguna, pengguna dapat mengklik kanan item dan melihat menu pintasan yang ditentukan oleh antarmuka IContextMenu Anda. Menu pintasan juga dikenal sebagai menu konteks.

Tindakan default pada menu konteks adalah tindakan yang sama yang diambil saat item diklik dua kali. Tanpa antarmuka IShellFolder atau IContextMenu yang sesuai untuk item, perilaku default untuk peristiwa klik ganda adalah meneruskan URL sebagai argumen ke fungsi Fungsi ShellExecute .

Lihat Membuat Penangan Menu Konteks untuk informasi selengkapnya tentang membuat penangan menu pintasan, dan Sampel: Ekstensi Shell untuk Penangan Protokol untuk kode sampel.

IExtractIcon

IExtractIcon mengambil ikon untuk antarmuka pengguna Windows Search berdasarkan URL di PIDL yang disediakan oleh handler protokol Anda.

Lihat Membuat Handler Ikon untuk informasi selengkapnya tentang membuat handler ikon dan Sampel: Ekstensi Shell untuk Penangan Protokol untuk kode sampel.

IPreviewHandler

IPreviewHandler merender pratinjau kaya item yang dipilih di Windows Explorer. Pratinjau tersedia di Windows Search 4.0, atau di Windows Vista dengan Windows Desktop Search 3.x.

Untuk membuat handler pratinjau kustom:

  1. Terapkan IPreviewHandler yang mengambil IStream, mengikuti panduan yang disediakan dalam Penangan Pratinjau.

  2. Daftarkan handler pratinjau Anda:

    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. Selesaikan dua langkah berikut untuk mengimplementasikan folder Shell untuk URL Anda:

    1. Di Metode IShellFolder::GetUIObjectOf, tangani IQueryAssociations dan kembalikan asosiasi Anda untuk item Shell Anda, seperti yang ditunjukkan dalam sampel kode berikut.

      CComPtr<IQueryAssociations> spqa;
      AssocCreate(CLSID_QueryAssociations, __uuidof(IQueryAssociations), &spqa);
      spqa->Init(0, L"Your_Object_Type", NULL, NULL);
      spqa->QueryInterface(riid, ppvReturn);
      
    2. Setelah Shell mengkueri folder Shell Anda untuk aliran data guna menginisialisasi handler pratinjau, buka metode Metode IShellFolder::BindToObject Anda, tangani IID_IStream dan kembalikan IStream ke URL Anda.

Untuk menggunakan kembali handler pratinjau yang sudah ada untuk jenis file Anda, ikuti dua langkah berikut:

  1. Daftarkan handler pratinjau tersebut untuk jenis file Anda menggunakan CLSID dari handler pratinjau yang ada sebagai pengganti <Your_PreviewHandler_GUID>.
  2. Menerapkan folder Shell.

Untuk informasi selengkapnya tentang membuat penangan pratinjau, lihat Penangan IPreviewHandler dan Pratinjau.

Sumber Daya Tambahan

Konseptual

Mengembangkan Penangan Protokol

Memahami Penangan Protokol

Memberi tahu Indeks Perubahan

Sampel Kode: Ekstensi Shell untuk Penangan Protokol

Menginstal dan Mendaftarkan Penangan Protokol

Membuat Konektor Pencarian untuk Penangan Protokol

Penangan Protokol Debugging