Bagikan melalui


Mendaftarkan Handler Ekstensi Shell

Objek handler ekstensi Shell harus didaftarkan sebelum Shell dapat menggunakannya. Topik ini adalah diskusi umum tentang cara mendaftarkan penangan 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, 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 detailnya, 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 GUID tersebut. Karena handler ekstensi Shell adalah server dalam proses, 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 diperlihatkan 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 subkuntang registri yang sesuai. Subkuntang tempat handler ekstensi terdaftar mengontrol kapan akan dipanggil. Misalnya, ini adalah praktik umum untuk memiliki penangan menu pintasan yang dipanggil ketika Shell menampilkan menu pintasan untuk anggota jenis file. Dalam hal ini, handler harus didaftarkan di bawah subkuntang ProgID jenis file.

Topik ini membahas subjek berikut:

Nama Handler

Untuk mengaktifkan handler ekstensi Shell, buat subkunci dengan nama subkunci handler (lihat di bawah) di bawah subkunci ShellEx dari ProgID (untuk jenis 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 bawah subkunci "Nama Subkunci Handler" bernama sebagai versi string pengidentifikasi kelas (CLSID) ekstensi Shell. Beberapa ekstensi dapat didaftarkan di bawah nama subkunci handler dengan membuat beberapa subkunci.

Penghandel Antarmuka Nama Subkuntang Handler
Handler penyedia kolom IColumnProvider ColumnHandlers
Penangan menu pintasan IContextMenu ContextMenuHandlers
Handler copyhook ICopyHook CopyHookHandlers
Handler seret dan letakkan IContextMenu DragDropHandlers
Handler lembar properti IShellPropSheetExt PropertySheetHandlers

 

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

Penghandel Antarmuka Nama Subkuntang Handler
Penangan data IDataObject DataHandler
Jatuhkan handler IDropTarget DropHandler
Handler ikon IExtractIcona/W IconHandler
Penangan gambar mini IThumbnailProvider {E357FCCD-A995-4576-B01F-234630154E96}
Penangan 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 menyertakan entri IsShortCut .

Objek Shell yang Telah Ditentukan Sebelumnya

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

HKEY_CLASSES_ROOT
   *
      shellex
         PropertySheetHandlers

Tabel berikut ini memberikan berbagai subkuntang HKEY_CLASSES_ROOT di mana handler ekstensi dapat didaftarkan. Perhatikan bahwa banyak penangan ekstensi tidak dapat didaftarkan di bawah semua subkuntang yang tercantum. Untuk detail lebih lanjut, lihat dokumentasi handler tertentu.

Subkunci Deskripsi Penangan yang Mungkin
* Semua file Menu Pintasan, Lembar Properti, Kata Kerja (lihat di bawah)
AllFileSystemObjects Semua file dan folder file Menu Pintasan, Lembar Properti, Kata Kerja
Folder Semua folder Menu Pintasan, Lembar Properti, Kata Kerja
Direktori Folder file Menu Pintasan, Lembar Properti, Kata Kerja
Direktori\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 MyComputer, seperti "C:\" Menu Pintasan, Lembar Properti, Kata Kerja
Jaringan Seluruh jaringan (di bawah Tempat Jaringan Saya) Menu Pintasan, Lembar Properti, Kata Kerja
Network\Type\ # 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 Kata kerja saja
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 di atas konten folder mana pun.
  • "Kata kerja" adalah perintah khusus yang terdaftar di bawah HKEY_CLASSES_ROOT\Subkey\Shell\Verb.
  • UntukJenis\#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 0x00330000, sehingga subkuncar jenis yang sesuai akan HKEY_CLASSES_ROOT\Jaringan\Tipe\51.
  • "network_provider_name" adalah nama penyedia jaringan seperti yang ditentukan oleh WNetGetProviderName, dengan spasi 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 subkunci jenis handler ekstensi dengan nama handler. Shell tidak menggunakan nama handler, tetapi harus berbeda dari semua nama lain di bawah subkuntang jenis tersebut. Atur nilai default subkey nama ke bentuk string GUID handler.

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 Handler Ekstensi Shell