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.
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
- Objek Shell yang Telah Ditentukan Sebelumnya
- Contoh Pendaftaran Pengelola Ekstensi
- Topik terkait
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}
Topik terkait