Bagikan melalui


Mendaftarkan Penangan Ekstensi Shell

Objek handler ekstensi Shell harus didaftarkan sebelum Shell dapat menggunakannya. Topik ini adalah diskusi umum tentang cara mendaftarkan handler ekstensi Shell.

Setiap kali Anda membuat atau mengubah handler ekstensi Shell, penting untuk memberi tahu sistem bahwa Anda telah membuat perubahan. Lakukan dengan memanggil SHChangeNotify, dengan menentukan peristiwa SHCNE_ASSOCCHANGED. Jika Anda tidak memanggil SHChangeNotify, perubahan mungkin tidak dikenali sampai sistem di-boot ulang.

Ada beberapa faktor tambahan yang berlaku untuk sistem Windows 2000. Untuk informasi lebih lanjut, lihat bagian Mendaftarkan Penangan Ekstensi Shell pada Sistem Windows 2000.

Seperti semua objek Model Objek Komponen (COM), Anda harus membuat GUID untuk handler menggunakan alat seperti Guidgen.exe, yang disediakan dengan Windows Software Development Kit (SDK). Buat subkunci di bawah HKEY_CLASSES_ROOT\CLSID yang namanya adalah bentuk string dari GUID tersebut. Karena handler ekstensi Shell adalah server in-process, Anda juga harus membuat subkunci InprocServer32 di bawah subkunci GUID tersebut dengan nilai (Default) yang diatur ke jalur DLL handler. Gunakan model utas apartemen. Contoh ditunjukkan di sini:

HKEY_CLASSES_ROOT
   CLSID
      {00021500-0000-0000-C000-000000000046}
         InprocServer32
            (Default) = %windir%\System32\Example.dll
            ThreadingModel = Apartment

Setiap kali Shell mengambil tindakan yang dapat melibatkan handler ekstensi Shell, Shell memeriksa subkunci registri yang sesuai. Subkunci di mana pengelola ekstensi terdaftar mengontrol kapan pengelola tersebut akan dipanggil. Misalnya, adalah praktik umum untuk memanggil handler menu pintasan saat Shell menampilkan menu pintasan untuk anggota jenis file . Dalam hal ini, handler harus didaftarkan di bawah subkunci jenis file ProgID.

Topik ini membahas subjek berikut:

Nama Handler

Untuk mengaktifkan handler ekstensi Shell, buat subkunci dengan nama subkunci handler (lihat di bawah) pada subkunci ShellEx dari ProgID (untuk tipe file) atau nama jenis objek Shell (untuk predefined_shell_objects).

Misalnya, jika Anda ingin mendaftarkan handler ekstensi menu pintasan untuk MyProgram.1, Anda mulai dengan membuat subkunci berikut:

HKEY_CLASSES_ROOT
   MyProgram.1
      ShellEx
         ContextMenuHandlers

Untuk handler berikut, buat subkunci di dalam subkunci "Nama Subkunci Handler" dengan nama yang merupakan versi string dari pengidentifikasi kelas (CLSID) dari ekstensi Shell. Beberapa ekstensi dapat didaftarkan di bawah nama subkunci handler dengan membuat beberapa subkunci.

Pengelola Antarmuka Nama Subkunci Handler
Pengelola penyedia kolom IColumnProvider ColumnHandlers
Pengelola menu pintasan IContextMenu ContextMenuHandlers
Pengelola copyhook ICopyHook PeganganPengaitSalinan
Handler seret dan letakkan IContextMenu DragDropHandlers
Pengelola lembar properti IShellPropSheetExt PropertySheetHandlers

 

Untuk handler berikut, nilai default kunci "Nama Sub Kunci Handler" adalah versi string dari CLSID ekstensi Shell. Hanya satu ekstensi yang dapat didaftarkan untuk handler ini.

Handler Antarmuka Nama Subkunci Handler
Pengelola data IDataObject DataHandler
Pengelola Penyerahan IDropTarget DropHandler
Handler ikon IExtractIcona/W IconHandler
Pengelola gambar mini IThumbnailProvider {E357FCCD-A995-4576-B01F-234630154E96}
Handler infotip IQueryInfo {00021500-0000-0000-C000-000000000046}
Tautan shell (ANSI) IShellLinkA {000214EE-0000-0000-C000-000000000046}
Tautan shell (UNICODE) IShellLinkW {000214F9-0000-0000-C000-000000000046}
Penyimpanan terstruktur IStorage {0000000B-0000-0000-C000-000000000046}
Metadata IPropertySetStorage PropertyHandler
Sematkan ke Menu Mulai IStartMenuPinnedList {a2a9545d-a0c2-42b4-9708-a0b2badd77c8}
Sematkan ke Bilah Tugas {90AA3A4E-1CBA-4233-B8BB-535773D48449}

 

Subkunci yang ditentukan untuk menambahkan Sematkan ke Menu Mulai dan Sematkan ke Bilah Tugas ke menu pintasan item hanya diperlukan untuk jenis file yang memiliki entri IsShortCut.

Objek Shell yang telah ditentukan sebelumnya

Shell menentukan objek tambahan di bawah HKEY_CLASSES_ROOT yang dapat diperluas dengan cara yang sama seperti jenis file. Misalnya, untuk menambahkan pengendali lembar properti untuk semua file, Anda dapat mendaftar di bawah subkunci PropertySheetHandlers.

HKEY_CLASSES_ROOT
   *
      shellex
         PropertySheetHandlers

Tabel berikut memberikan berbagai subkunci HKEY_CLASSES_ROOT tempat pendaftar penangan ekstensi dapat dilakukan. Perhatikan bahwa banyak pengelola ekstensi tidak dapat didaftarkan di bawah semua subkunci yang tercantum. Untuk detail lebih lanjut, lihat dokumentasi handler tertentu.

Subkunci Deskripsi Kemungkinan Pengendali
* Semua file Menu Pintasan, Lembar Properti, Kata Kerja (lihat di bawah)
SemuaObjekSistemFile Semua file dan folder Menu Pintasan, Lembar Properti, Kata Kerja
Folder Semua folder Menu Pintasan, Lembar Properti, Kata Kerja
Direktori Folder berkas Menu Pintasan, Lembar Properti, Kata Kerja
Directory\Latar Belakang Latar belakang folder file Menu Pintasan saja
DesktopBackground Latar belakang desktop (Windows 7 dan yang lebih tinggi) Menu Pintasan, Kata Kerja
Drive Semua drive di Komputer Saya, seperti "C:\" Menu Pintasan, Lembar Properti, Kata Kerja
Jaringan Seluruh jaringan (di bawah Tempat Jaringan Saya) Menu Pintasan, Lembar Properti, Kata Kerja
Jaringan\Tipe\# Semua objek jenis # (lihat di bawah) Menu Pintasan, Lembar Properti, Kata Kerja
NetShare Semua berbagi jaringan Menu Pintasan, Lembar Properti, Kata Kerja
NetServer Semua server jaringan Menu Pintasan, Lembar Properti, Kata Kerja
network_provider_name Semua objek yang disediakan oleh penyedia jaringan "network_provider_name" Menu Pintasan, Lembar Properti, Kata Kerja
Printer Semua printer Menu Pintasan, Lembar Properti
AudioCD CD Audio di drive CD Hanya kata kerja
DVD Drive DVD (Windows 2000) Menu Pintasan, Lembar Properti, Kata Kerja

 

Catatan

  • Menu pintasan latar belakang folder file diakses dengan mengklik kanan dalam folder file, tetapi tidak melalui konten folder mana pun.
  • "Kata kerja" adalah perintah khusus yang terdaftar di bawah HKEY_CLASSES_ROOT\Subkey\Shell\Kata Kerja.
  • Untuk Jenis Jaringan \\#, "#" adalah kode jenis penyedia jaringan dalam desimal. Kode jenis penyedia jaringan adalah kata tinggi dari jenis jaringan. Daftar jenis jaringan diberikan dalam file header Winnetwk.h (nilai WNNC_NET_*). Misalnya, WNNC_NET_SHIVA adalah 0x00330000, sehingga subkunci jenis yang sesuai akan HKEY_CLASSES_ROOT\Jaringan\Tipe\51.
  • "network_provider_name" adalah nama penyedia jaringan seperti yang ditentukan oleh WNetGetProviderName, dengan spasi yang dikonversi menjadi garis bawah. Misalnya, jika penyedia jaringan Microsoft Networking diinstal, nama penyedianya adalah "Microsoft Windows Network", dan network_provider_name yang sesuai Microsoft_Windows_Network.

Contoh Pendaftaran Handler Ekstensi

Untuk mengaktifkan handler tertentu, buat subkunci di bawah tipe handler ekstensi dengan nama handler tersebut. Shell tidak menggunakan nama handler, tetapi nama tersebut harus berbeda dari semua nama lain di bawah subkunci tipe itu. Atur nilai default dari subkunci nama ke bentuk string GUID dari pengelola.

Contoh berikut mengilustrasikan entri registri yang mengaktifkan menu pintasan dan penangan ekstensi lembar properti, menggunakan contoh jenis file .myp.

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
   CLSID
      {00000000-1111-2222-3333-444444444444}
         InProcServer32
            (Default) = C:\MyDir\MyCommand.dll
            ThreadingModel = Apartment
      {11111111-2222-3333-4444-555555555555}
         InProcServer32
            (Default) = C:\MyDir\MyPropSheet.dll
            ThreadingModel = Apartment
   MyProgram.1
      (Default) = MyProgram Application
      Shellex
         ContextMenuHandler
            MyCommand
               (Default) = {00000000-1111-2222-3333-444444444444}
         PropertySheetHandlers
            MyPropSheet
               (Default) = {11111111-2222-3333-4444-555555555555}

Menginisialisasi Penanganan Ekstensi Shell