Bekerja dengan Ekstensi Shell

Kemampuan Shell dapat diperluas dengan entri registri dan file .ini. Meskipun pendekatan untuk memperluas Shell ini sederhana dan memadai untuk berbagai keperluan, pendekatan ini masih memiliki keterbatasan. Misalnya, jika Anda menggunakan registri untuk menentukan ikon kustom untuk jenis file, ikon yang sama akan muncul untuk setiap file jenis tersebut. Memperluas Shell dengan registri tidak memungkinkan Anda untuk memvariasikan ikon untuk anggota yang berbeda dari jenis file. Aspek lain dari Shell, seperti lembar properti Properti yang dapat ditampilkan ketika file diklik kanan, tidak dapat dimodifikasi sama sekali dengan registri.

Pendekatan yang lebih canggih dan fleksibel untuk memperluas Shell adalah dengan mengimplementasikan handler ekstensi Shell. Handler ini dapat diimplementasikan untuk berbagai tindakan yang dapat dilakukan Shell. Sebelum mengambil tindakan, Shell meminta handler ekstensi, memberinya kesempatan untuk memodifikasi tindakan. Contoh umumnya adalah penangan ekstensi menu pintasan. Jika diterapkan untuk suatu jenis file, hal itu akan diperiksa setiap kali salah satu file tersebut diklik kanan. Handler kemudian dapat menentukan item menu tambahan berdasarkan file demi file, daripada memiliki set yang sama untuk semua file jenis file tersebut.

Set topik ini membahas cara mengimplementasikan handler ekstensi yang memungkinkan Anda memodifikasi berbagai tindakan Shell. Penanganan berikut dikaitkan dengan jenis berkas tertentu dan memungkinkan Anda menentukan pengaturan untuk masing-masing berkas.

Pengelola Deskripsi
Pengelola menu pintasan Dipanggil sebelum menu pintasan file ditampilkan. Ini memungkinkan Anda untuk menambahkan item ke menu pintasan berdasarkan file demi file.
Pengendali data Dipanggil saat operasi seret dan lepas dilakukan pada objek Shell. Ini memungkinkan Anda menyediakan format clipboard tambahan ke target pelepasan.
Drop handler Dipanggil saat objek data diseret ke atas atau dijatuhkan ke sebuah file. Ini memungkinkan Anda menjadikan file sebagai target peletakan.
Penangan ikon Dipanggil sebelum ikon file ditampilkan. Ini memungkinkan Anda mengganti ikon default file dengan ikon kustom berdasarkan file demi file.
Penangan lembar properti Dipanggil sebelum lembar properti Properti objek ditampilkan. Ini memungkinkan Anda untuk menambahkan atau mengganti halaman.
Penangan gambar mini Menyediakan gambar untuk mewakili item.
Handler infotip Menyediakan teks pop-up saat pengguna mengarahkan penunjuk mouse ke atas objek.
Handler metadata Menyediakan akses baca dan tulis ke metadata (properti) yang disimpan dalam file. Ini dapat digunakan untuk memperluas tampilan Detail, infotip, halaman properti, dan fitur pengelompokan.

 

Yang lain tidak terkait dengan jenis file tertentu tetapi dipanggil sebelum beberapa operasi Shell.

Pengelola Deskripsi
Pengendali kolom Dipanggil oleh Windows Explorer sebelum menampilkan tampilan Detail folder. Ini memungkinkan Anda menambahkan kolom kustom ke tampilan Detail.
Penangan hook penyalinan Dipanggil ketika folder atau objek printer akan dipindahkan, disalin, dihapus, atau diganti namanya. Ini memungkinkan Anda menyetujui atau memveto operasi.
Handler seret dan letakkan Dipanggil saat file diseret menggunakan tombol kanan mouse. Ini memungkinkan Anda untuk mengubah menu pintasan yang ditampilkan.
Handler Overlay Ikon Dipanggil sebelum ikon file ditampilkan. Ini memungkinkan Anda menentukan overlay untuk ikon file.
Pengendali pencarian Dipanggil untuk meluncurkan mesin pencari. Ini memungkinkan Anda menerapkan mesin pencari kustom yang dapat diakses dari menu Mulai atau Windows Explorer.

 

Detail cara mengimplementasikan handler ekstensi tertentu tercakup dalam bagian yang tercantum di atas. Untuk diskusi tentang masalah implementasi yang umum untuk semua penangan ekstensi Shell, lihat topik-topik berikut:

Note

Pertimbangan keamanan dan stabilitas: Penangan ekstensi Shell adalah DLL COM dalam proses yang dimuat langsung ke dalam proses Explorer (atau proses apa pun yang menghosting Shell). Crash atau hang pada ekstensi Anda akan menyebabkan Explorer mogok atau tidak merespons bagi semua pengguna.

Persyaratan utama:

  • Daftarkan dengan ThreadingModel = Apartment — tampilan shell Explorer berjalan pada utas STA. Menggunakan Free atau Both dapat menyebabkan bug utas yang sulit dideteksi.
  • Tangani dukungan DPI dengan benar — Explorer mendukung DPI per monitor. Ekstensi yang menganggap DPI tetap akan dirender secara tidak benar pada konfigurasi multi-monitor.
  • Untuk aplikasi paket (MSIX), gunakan pendaftaran berbasis manifes melalui desktop4:Extension elemen atau Paket Sparse alih-alih menulis kunci registri secara langsung.
  • Pertimbangkan apakah pendekatan yang lebih sederhana (pendaftaran kata kerja statis, .reg asosiasi file, atau Windows. Storage.Provider API) dapat memenuhi kebutuhan Anda sebelum menerapkan ekstensi shell COM penuh.