Membuat Handler Kolom

[Fitur ini hanya didukung di bawah Windows XP atau yang lebih lama. ]

Tampilan Detail di Windows Explorer biasanya menampilkan beberapa kolom standar. Setiap kolom mencantumkan informasi, seperti ukuran atau jenis file, untuk setiap file dalam folder saat ini. Dengan menerapkan dan mendaftarkan handler kolom, Anda dapat membuat kolom kustom tersedia untuk ditampilkan.

Prosedur umum untuk menerapkan dan mendaftarkan handler ekstensi Shell dibahas dalam Membuat Penangan Ekstensi Shell. Dokumen ini berfokus pada aspek implementasi yang khusus untuk penangan kolom.

Topik berikut dibahas.

Cara Kerja Penangan Kolom

Ilustrasi berikut ini memperlihatkan Windows Explorer dalam tampilan Detail.

cuplikan layar windows explorer dalam tampilan detail

Dengan Windows 2000, folder juga dapat mendukung sejumlah kolom yang, secara default, tidak ditampilkan. Pengguna dapat menampilkan kolom tambahan dengan mengklik kanan salah satu header kolom dan memilih perintah Lainnya... dari menu. Kotak dialog kemudian muncul yang mencantumkan kolom yang tersedia untuk folder dan memungkinkan pengguna memilih kolom mana yang akan ditampilkan. Ilustrasi berikut ini memperlihatkan kotak dialog ini untuk contoh sebelumnya.

cuplikan layar penjelajah windows dengan kotak dialog pilih detail yang ditampilkan

Dengan membuat handler kolom, Anda bisa membuat kolom kustom dan menambahkannya ke daftar tersebut. Misalnya, kumpulan file yang berisi musik dapat menggunakan handler kolom untuk menampilkan kolom yang mencantumkan artis dan bagian yang dimuat oleh setiap file.

Handler kolom adalah objek global yang dipanggil setiap kali Windows Explorer menampilkan tampilan Detail. Namun, penangan kolom biasanya digunakan untuk menampilkan kolom kustom hanya untuk anggota jenis file tertentu. Sebelum menampilkan tampilan Detail, Windows Explorer meminta semua penangan kolom terdaftar untuk karakteristik kolomnya. Jika pengguna telah memilih salah satu kolom handler, Windows Explorer meminta handler untuk data terkait. Saat handler kolom menerima permintaan data, penangan kolom menyediakannya jika file adalah anggota dari jenis yang didukung. Jika tidak, permintaan akan diabaikan dengan mengembalikan S_FALSE.

Mendaftarkan Penangan Kolom

Penangan kolom terdaftar di bawah subkuntang berikut.

HKEY_CLASSES_ROOT
   Folder
      shellex
         ColumnHandlers

Buat subkunci ColumnHandlers bernama dengan bentuk string GUID pengidentifikasi kelas handler (CLSID). Untuk diskusi umum tentang cara mendaftarkan penangan ekstensi Shell, lihat Membuat Penangan Ekstensi Shell. Contoh berikut mengilustrasikan cara mendaftarkan penangan kolom.

HKEY_CLASSES_ROOT
   Folder
      shellex
         ColumnHandlers
            {My Column Handler CLSID GUID}

Menerapkan Handler Kolom

Seperti semua penangan ekstensi Shell, penangan kolom adalah objek Model Objek Komponen (COM) dalam proses yang diimplementasikan sebagai DLL. Mereka mengekspor antarmuka IColumnProvider selain IUnknown.

Windows Explorer memanggil tiga metode yang diekspor oleh IColumnProvider untuk meminta informasi yang diperlukan untuk menampilkan kolom. Prosedur yang digunakan oleh Windows Explorer adalah:

  1. Panggil IColumnProvider::Initialize untuk menentukan folder yang akan ditampilkan.
  2. Panggil IColumnProvider::GetColumnInfo untuk mengambil pengidentifikasi dan karakteristik kolom.
  3. Jika kolom telah dipilih oleh pengguna, panggil IColumnProvider::GetItemData untuk setiap file di folder untuk mengambil data yang termasuk dalam entri kolom file.

Metode Inisialisasi

Windows Explorer memanggil IColumnProvider::Initialize untuk menginisialisasi handler kolom. Metode ini memiliki tiga parameter, tetapi hanya wszFolder yang saat ini digunakan. Ini diatur ke folder yang tampilan Detailnya akan ditampilkan. Simpan nama folder untuk digunakan nanti dan inisialisasi objek handler sesuai kebutuhan.

Metode GetColumnInfo

Windows Explorer selanjutnya memanggil IColumnProvider::GetColumnInfo untuk meminta pengidentifikasi dan karakteristik kolom. Ini melewati indeks untuk kolom dalam parameter dwIndex . Indeks ini adalah nilai arbitrer yang digunakan untuk menghitung kolom. Windows Explorer juga meneruskan penunjuk ke struktur SHCOLUMNINFO . Struktur ini digunakan untuk mengembalikan pengidentifikasi dan karakteristik kolom. IColumnProvider::GetColumnInfo harus menetapkan nilai yang sesuai kepada anggota struktur dan pengembalian.

Kolom diidentifikasi oleh ID set properti OLE (FMTID) dan ID properti terkait (PID). Anggota pertama dari struktur SHCOLUMNINFO , scid, adalah penunjuk ke struktur SHCOLUMNID yang digunakan untuk mengidentifikasi kolom. Anggota fmtidnya memegang FMTID kolom, dan anggota pid-nya memegang PID kolom. Misalnya, pasangan FMTID/PID standar yang umumnya digunakan untuk mengidentifikasi kolom adalah PID Penulis dari kumpulan properti Informasi Ringkasan.

Jika memungkinkan, handler Anda harus menggunakan FMTID dan PID yang ada untuk mengidentifikasi kolom yang didukungnya. Jika Anda menggunakan struktur SHCOLUMNID kustom, kolom hanya akan menampilkan data untuk file-file yang didukung oleh handler. Jika folder berisi file lain, entrinya akan kosong. Jika folder berisi file dari lebih dari satu jenis file, menggunakan nilai FMTID/PID standar dapat memungkinkan untuk menggabungkan data dari berbagai jenis ke dalam kolom yang sama.

Atur anggota vt ke jenis VARIAN data yang ingin Anda tampilkan di kolom. Jenis yang paling umum digunakan adalah VT_LPSTR, karena sebagian besar kolom menampilkan datanya sebagai string karakter. Anggota struktur SHCOLUMNINFO yang tersisa digunakan untuk menentukan karakteristik kolom. Tetapkan nilai yang sesuai.

Metode GetItemData

Jika kolom handler kolom telah dipilih, Windows Explorer memanggil IColumnProvider::GetItemData untuk setiap file dalam folder yang akan ditampilkan. Parameter pscid adalah penunjuk ke struktur SHCOLUMNID yang mengidentifikasi kolom. Parameter pscd menunjuk ke struktur SHCOLUMNDATA yang mengidentifikasi file tertentu.

Parameter pvarData mengembalikan data yang harus ditampilkan di kolom handler untuk file yang ditentukan oleh pscd. Jika file tersebut didukung oleh handler kolom Anda, tetapkan nilai datanya ke pvarData dan kembalikan S_OK. Jika file tidak didukung oleh handler kolom Anda, kembalikan S_FALSE tanpa menetapkan nilai ke pvarData.

Banyak folder akan berisi sejumlah file yang tidak didukung oleh penangan kolom tertentu. Untuk meningkatkan efisiensi, IColumnProvider::GetItemData harus terlebih dahulu memeriksa anggota pwszExt dari struktur yang ditunjukkan oleh pscd. Anggota ini memegang ekstensi nama file. Jika ekstensi menunjukkan bahwa file bukan anggota jenis file yang didukung oleh handler Anda, hindari pemrosesan yang tidak perlu dengan segera mengembalikan S_FALSE.