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:
- Antarmuka IPersistFile
- Atau Antarmuka IShellExtInit
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:
Terapkan IPreviewHandler yang mengambil IStream, mengikuti panduan yang disediakan dalam Penangan Pratinjau.
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>}
Selesaikan dua langkah berikut untuk mengimplementasikan folder Shell untuk URL Anda:
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);
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:
- Daftarkan handler pratinjau tersebut untuk jenis file Anda menggunakan CLSID dari handler pratinjau yang ada sebagai pengganti <Your_PreviewHandler_GUID>.
- Menerapkan folder Shell.
Untuk informasi selengkapnya tentang membuat penangan pratinjau, lihat Penangan IPreviewHandler dan Pratinjau.
Sumber Daya Tambahan
- Untuk gambaran umum proses pengindeksan, lihat Proses Pengindeksan.
- Untuk informasi tentang membuat penangan, lihat Mendaftarkan Ekstensi Shell, Membuat Penangan Ekstensi Shell, Menu Konteks, Ekstensi Namespace Shell , dan Penangan Pratinjau.
Topik terkait
-
Konseptual