Cara Membuat Handler Ikon
Jenis file sering memiliki ikon kustom yang terkait dengannya, untuk membuat anggotanya mudah dikenali di Windows Explorer. Cara paling sederhana untuk menetapkan ikon kustom ke jenis file adalah dengan mendaftarkan file ikon. Namun, ikon yang terdaftar dengan cara ini akan sama untuk semua anggota jenis file. Anda dapat memiliki lebih banyak fleksibilitas dalam menetapkan ikon kepada anggota jenis file dengan menerapkan handler ikon .
Handler ikon adalah jenis handler ekstensi Shell yang memungkinkan Anda menetapkan ikon secara dinamis kepada anggota jenis file. Setiap kali file jenis ditampilkan, Shell meminta handler untuk ikon yang sesuai. Misalnya, handler ikon dapat menetapkan ikon yang berbeda ke anggota yang berbeda dari jenis file, atau memvariasikan ikon berdasarkan status file saat ini.
Prosedur umum untuk menerapkan dan mendaftarkan penangan ekstensi Shell dibahas dalam Membuat Penangan Ekstensi Shell. Dokumen ini berfokus pada aspek implementasi yang khusus untuk penangan ikon.
Peraturan
Langkah 1: Menerapkan Handler Ikon
Seperti semua handler ekstensi Shell, handler ikon adalah objek Model Objek Komponen (COM) dalam proses yang diimplementasikan sebagai DLL. Mereka harus mengekspor dua antarmuka selain IUnknown: IPersistFile dan IExtractIcon.
Shell menginisialisasi handler melalui antarmuka IPersistFile. Ini menggunakan antarmuka ini untuk meminta pengidentifikasi kelas handler (CLSID) dan menyediakannya dengan nama file. Sisa operasi berlangsung melalui antarmukaIExtractIcon. Untuk pembahasan umum mengenai cara mengimplementasikan handler ekstensi Shell, termasuk antarmuka IPersistFile, lihat Membuat Handler Ekstensi Shell. Sisa dokumen ini membahas cara mengimplementasikan antarmuka IExtractIcon.
Langkah 2: Menerapkan Antarmuka IExtractIcon
Setelah antarmuka diinisialisasi, Shell menggunakan antarmukaIExtractIcon handler untuk meminta ikon yang sesuai. Antarmuka memiliki dua metode: IExtractIcon::GetIconLocation dan IExtractIcon::Extract.
Ikon diidentifikasi oleh lokasinya dalam sistem file. MetodeIExtractIcon::GetIconLocation dipanggil untuk meminta informasi ini. Atur parameter szIconFile ke nama file. Jika ada lebih dari satu ikon dalam file, atur piIndex ke indeks ikon. Tetapkan nilai yang sesuai ke dua variabel bendera. Jika Anda tidak ingin menentukan nama file, atau jika Anda tidak ingin Shell mengekstrak ikon, atur bendera GIL_NOTFILENAME di parameter pwFlags. Anda tidak perlu menetapkan nilai ke szIconFile, tetapi handler harus menyediakan handel ikon saat Shell memanggil IExtractIcon::Extract.
Jika Anda mengembalikan nama file, Shell biasanya mencoba memuat ikon dari cache-nya. Untuk mencegah pemuatan ikon yang di-cache, atur bendera GIL_DONTCACHE di parameter pwFlags. Jika ikon cache tidak dimuat, Shell kemudian memanggil IExtractIcon::Extract untuk meminta handel ikon.
Jika file dan indeks ditentukan oleh IExtractIcon::GetIconLocation, file dan indeks diteruskan ke IExtractIcon::Ekstrak di pszFile dan parameter nIconIndex. Jika nama file disediakan, handler Anda dapat mengembalikan S_FALSE agar Shell mengekstrak ikon. Jika tidak, handler Anda harus mengekstrak atau menghasilkan ikon besar dan kecil, serta menetapkan handle HICON mereka ke parameter phiconLarge dan phiconSmall. Shell menambahkan ikon ke cache-nya untuk mempercepat panggilan berikutnya ke handler.
Langkah 3: Mendaftarkan Handler Ikon
Saat Anda secara statis mendaftarkan ikon untuk jenis file , Anda membuat subkunci DefaultIcon di bawah ProgID untuk jenis file. Nilai defaultnya diatur ke file yang berisi ikon . Untuk mendaftarkan handler ikon, Anda masih harus memiliki subkunci DefaultIcon, tetapi nilai defaultnya harus diatur ke "%1". Tambahkan subkunci IconHandler ke subkunci Shellex dari subkunci ProgID, dan atur nilai defaultnya ke bentuk string GUID CLSID dari handler. Untuk diskusi umum tentang cara mendaftarkan penangan ekstensi Shell, lihat Tentang Membuat Penangan Ekstensi Shell.
Contoh berikut memodifikasi entri registri dari Menyesuaikan Ikon sehingga jenis file .myp sekarang menggunakan handler menu pintasan alih-alih ikon yang ditentukan secara statis.
HKEY_CLASSES_ROOT
.myp
(Default) = MyProgram.1
MyProgram.1
(Default) = MyProgram Application
DefaultIcon
(Default) = %1
Shellex
IconHandler
(Default) = {The handler's CLSID GUID}
Topik terkait