Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penangan pratinjau dipanggil saat item dipilih untuk menampilkan pratinjau konten file yang ringan dan kaya, baca-saja di panel baca dari tampilan. Ini dilakukan tanpa meluncurkan aplikasi terkait file.
Topik ini membahas topik berikut:
- Arsitektur Penangan Pratinjau
- Opsi Model Server
- Inisialisasi
- Aliran Data Handler Pratinjau
- Mendebug Handler Pratinjau
- Menyediakan Proses Pribadi untuk Handler Pratinjau
- Topik terkait
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:
- IInitializeWithStream
- IObjectWithSite
- IOleWindow
- IPreviewHandler
- IPreviewHandlerVisuals (Opsional)
Handler Anda dipanggil melalui IObjectWithSite, yang mengembalikan pointer IUnknown tempat Anda meminta objek IPreviewHandlerFrame untuk berinteraksi dengan host.
Model Server Opsi
Penangan pratinjau selalu kehabisan proses. Ada dua metode untuk mengimplementasikan ini:
- Handler pratinjau dapat dibangun sebagai server di 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 dibangun oleh metode ini tidak kompatibel dengan Outlook 2007 pada Windows XP. Namun, handler yang sama ini akan berfungsi di Windows Explorer dan Outlook 2007 yang berjalan di Windows Vista.
- Handler pratinjau dapat dibangun sebagai server Komponen Model Objek (COM) lokal. Ini tidak disarankan karena beberapa alasan. Pertama, implementasi server yang berjalan 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 bawaan, handler 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 tidak rendah IL.
HKEY_CLASSES_ROOT
CLSID
{YOUR HANDLER'S CLSID}
DisableLowILProcessIsolation [DWORD] = 1
Penanganan 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 aliran. Anda dapat menginisialisasi melalui file atau item jika perlu, tetapi stream menyediakan cara paling aman untuk mengimplementasikan handler. Inisialisasi melalui aliran memastikan integritas file serta memberikan manfaat stabilitas bagi sistem saat menjalankan handler sebagai proses dengan integrity level (IL) rendah, seperti melindungi sistem dari kelebihan buffer, membatasi lokasi tempat handler dapat menulis informasi, dan membatasi komunikasi dengan jendela yang lain.
Jika Anda harus menginisialisasi dengan file atau item Shell, simpan jalur file atau referensi ke IShellItem. Jangan membaca data dari sumber ini hingga IPreviewHandler::DoPreview dipanggil.
Secara umum, inisialisasi tidak boleh melakukan tugas berat seperti menggubah dan menyimpan gambar pratinjau. Untuk efisiensi optimal, pemrosesan semacam itu tidak boleh dilakukan sampai pratinjau dipanggil.
Pratinjau Aliran Data Handler
Aliran data dalam proses pratinjau mengikuti jalur umum yang diperlihatkan di sini. Host dapat dianggap seperti Windows Explorer pada Windows Vista atau Outlook 2007.
- Handler pratinjau diinisialisasi, sebaiknya dengan aliran data.
- Jendela tampilan diteruskan dari host ke handler melalui IPreviewHandler::SetWindow.
- Pada titik ini, handler seharusnya tidak melakukan apa pun lagi sampai IPreviewHandler::DoPreview dipanggil.
- Pratinjau ditampilkan di panel pembacaan melalui panggilan ke IPreviewHandler::DoPreview.
- Ukuran jendela diatur melalui IPreviewHandler::SetRect.
- Jendela diubah ukurannya ketika diperlukan melalui IPreviewHandler::SetRect.
- Pratinjau dihentikan dan sumber dayanya dirilis ketika tidak lagi diperlukan, melalui panggilan ke IPreviewHandler::Unload.
Pengaturan Debug Pengendali Pratinjau
Jika Anda telah mengikuti rekomendasi untuk mengimplementasikan handler pratinjau Anda sebagai server dalam-proses, untuk melakukan debugging pada handler pratinjau, Anda dapat melampirkan ke Prevhost.exe. Seperti disebutkan sebelumnya, ketahuilah bahwa mungkin ada dua instance Prevhost.exe, satu untuk proses IL rendah standar dan satu lagi untuk penangan yang memilih untuk tidak berjalan sebagai proses IL rendah.
Jika Anda tidak menemukan Prevhost.exe dalam daftar proses yang tersedia, mungkin belum dimuat pada saat itu. Dengan mengklik file untuk pratinjau, surrogat akan dimuat dan kemudian akan muncul sebagai proses yang dapat dihubungkan.
Menyediakan Proses Anda Sendiri untuk Pengelola Pratinjau
Jika Anda ingin memaksa pembuatan proses baru untuk handler Anda daripada berjalan di bawah proses default, buat subkunci baru untuk handler Anda di bawah AppID dan atur entri DllSurrogate-nya ke "Prevhost.exe". Gunakan subkunci AppID tersebut alih-alih Prevhost.exe AppIDdefault.
Dengan menyediakan proses baru, handler dapat menghindari berjalan di bawah proses bersama sebagaimana biasanya dilakukan secara default. Ini dapat memungkinkan Anda, misalnya, untuk memastikan versi spesifik dari runtime bahasa umum (CLR) dalam proses. Ini diperlukan jika Anda membangun implementasi terkelola dari handler pratinjau.
Nota
Pengendali pratinjau 32-bit harus menggunakan AppID {534A1E02-D58F-44f0-B58B-36CBED287C7C} saat diinstal pada sistem operasi 64-bit.
Topik terkait