Penangan Pratinjau dan Host Pratinjau Shell

Penangan pratinjau dipanggil saat item dipilih untuk memperlihatkan pratinjau konten file yang ringan, kaya, dan baca-saja di panel baca tampilan. Ini dilakukan tanpa meluncurkan aplikasi terkait file.

Topik ini membahas topik berikut:

Arsitektur Handler Pratinjau

Handler pratinjau adalah aplikasi yang dihosting. Host menyertakan Windows Explorer di Windows Vista atau Microsoft Outlook 2007. Host mengimplementasikan IPreviewHandlerFrame sebagai metode komunikasi antara handler pratinjau dan host.

Handler pratinjau itu sendiri mengimplementasikan antarmuka ini:

Handler Anda dipanggil melalui IObjectWithSite, yang mengembalikan pointer IUnknown tempat Anda meminta objek IPreviewHandlerFrame untuk berinteraksi dengan host.

Opsi Model Server

Handler pratinjau selalu kehabisan proses. Ada dua metode untuk mengimplementasikan ini:

  1. Handler pratinjau dapat dibangun sebagai server dalam proses tetapi dijalankan melalui host pengganti di luar proses. Ini adalah metode yang disukai. Sistem menyediakan host pengganti untuk ini dalam file Prevhost.exe. Penanganan pratinjau yang dibuat oleh metode ini tidak kompatibel dengan Outlook 2007 di Windows XP. Namun, handler yang sama ini akan berfungsi di Windows Explorer dan Outlook 2007 yang berjalan di Windows Vista.
  2. Handler pratinjau dapat dibangun sebagai server Model Objek Komponen (COM) lokal. Ini tidak disarankan karena beberapa alasan. Pertama, implementasi server dalam proses lebih mudah. Lebih penting lagi, implementasi sebagai server dalam proses memberikan kontrol yang lebih besar atas masa pakai objek handler, yang memungkinkan pembersihan dan efisiensi yang lebih baik.

Secara default, penangan pratinjau berjalan dalam proses tingkat integritas rendah (IL) karena alasan keamanan. Anda dapat secara opsional menonaktifkan berjalan sebagai proses IL rendah dengan mengatur nilai berikut dalam registri. Namun, tidak disarankan untuk melakukannya. Sistem pada akhirnya dapat dikonfigurasi untuk menolak proses apa pun yang bukan IL rendah.

HKEY_CLASSES_ROOT
   CLSID
      {YOUR HANDLER'S CLSID}
         DisableLowILProcessIsolation [DWORD] = 1

Penangan pratinjau yang berbeda berbagi proses yang sama secara default. Dua instans Prevhost.exe dapat berjalan secara bersamaan; satu untuk handler yang berjalan sebagai proses IL rendah, satu untuk handler yang telah memilih keluar dari perilaku tersebut.

Inisialisasi

Seperti halnya thumbnail dan handler properti, sangat disarankan agar Anda menginisialisasi handler Anda dengan streaming. Anda dapat menginisialisasi melalui file atau item jika perlu, tetapi stream menyediakan cara paling aman untuk mengimplementasikan handler. Inisialisasi melalui aliran memastikan integritas file dan manfaat stabilitas untuk sistem menjalankan handler sebagai proses IL rendah, seperti melindungi sistem dari overrun buffer, membatasi di mana handler dapat menulis informasi, dan membatasi komunikasi dengan jendela lain.

Jika Anda harus menginisialisasi dengan file atau item Shell, simpan jalur file atau referensi ke IShellItem. Jangan membaca data dari sumber ini sampai IPreviewHandler::D oPreview dipanggil.

Secara umum, inisialisasi tidak boleh melakukan pekerjaan berat seperti menyusun dan menyimpan gambar pratinjau. Untuk efisiensi optimal, pemrosesan semacam itu tidak boleh dilakukan sampai pratinjau dipanggil.

Aliran Data Handler Pratinjau

Aliran data dalam proses pratinjau mengikuti jalur umum yang diperlihatkan di sini. Host dapat dianggap sebagai Windows Explorer di Windows Vista atau Outlook 2007.

  1. Handler pratinjau diinisialisasi, sebaiknya dengan aliran.
  2. Jendela tampilan diteruskan dari host ke handler melalui IPreviewHandler::SetWindow.
  3. Pada titik ini, handler seharusnya tidak melakukan apa pun lagi sampai IPreviewHandler::D oPreview dipanggil.
  4. Pratinjau ditampilkan di panel baca melalui panggilan ke IPreviewHandler::D oPreview.
  5. Ukuran jendela diatur melalui IPreviewHandler::SetRect.
  6. Jendela diubah ukurannya saat diperlukan melalui IPreviewHandler::SetRect.
  7. Pratinjau dibongkar dan sumber dayanya dirilis ketika tidak lagi diperlukan, melalui panggilan ke IPreviewHandler::Unload.

Men-debug Handler Pratinjau

Jika Anda telah mengikuti rekomendasi untuk mengimplementasikan handler pratinjau Anda sebagai server dalam proses, untuk men-debug handler pratinjau, Anda dapat melampirkan ke Prevhost.exe. Seperti disebutkan sebelumnya, ketahuilah bahwa mungkin ada dua instans Prevhost.exe, satu untuk proses IL rendah normal dan satu untuk penangan yang telah memilih tidak berjalan sebagai proses IL rendah.

Jika Anda tidak menemukan Prevhost.exe dalam daftar proses yang tersedia, mungkin belum dimuat pada saat itu. Mengklik file untuk pratinjau memuat pengganti dan kemudian akan muncul sebagai proses yang dapat dilampirkan.

Menyediakan Proses Anda Sendiri untuk Handler Pratinjau

Jika Anda ingin memaksa pembuatan proses baru untuk handler Anda daripada berjalan di bawah proses default, buat subkunci baru untuk handler Anda di appID dan atur entri DllSurrogate-nya ke "Prevhost.exe". Gunakan subkunjud AppID tersebut alih-alih Prevhost.exe AppID default.

Dengan menyediakan proses baru, handler dapat menghindari berjalan di bawah proses bersama seperti yang akan dilakukan secara default. Ini dapat memungkinkan Anda, misalnya, untuk memastikan versi tertentu dari runtime bahasa umum (CLR) dalam proses. Ini diperlukan jika Anda membangun implementasi terkelola dari penangan pratinjau.

Catatan

Penangan pratinjau 32-bit harus menggunakan AppID {534A1E02-D58F-44f0-B58B-36CBED287C7C} saat diinstal pada sistem operasi 64-bit.

 

Membangun Handler Pratinjau

Cara Mendaftarkan Handler Pratinjau

Panduan Handler Pratinjau