Membuat Penangan Ekstensi Shell

Kemampuan Shell dapat diperluas dengan entri registri dan file .ini. Meskipun pendekatan untuk memperluas Shell ini sederhana, dan memadai untuk banyak tujuan, itu terbatas. Misalnya, jika Anda menggunakan registri untuk menentukan ikon kustom untuk jenis file, ikon yang sama akan muncul untuk setiap file jenis tersebut. Memperluas Shell dengan registri tidak memungkinkan Anda untuk memvariasikan ikon untuk file yang berbeda dengan jenis yang sama. Aspek lain dari Shell, seperti lembar properti Properti yang dapat ditampilkan saat file diklik kanan, tidak dapat dimodifikasi sama sekali dengan registri.

Pendekatan yang lebih kuat dan fleksibel untuk memperluas Shell adalah dengan mengimplementasikan penangan ekstensi shell. Handler ini dapat diimplementasikan untuk berbagai tindakan yang dapat dilakukan Shell. Sebelum mengambil tindakan, Shell meminta handler ekstensi, memberinya kesempatan untuk memodifikasi tindakan. Contoh umumnya adalah handler ekstensi menu pintasan. Jika diimplementasikan untuk jenis file, file akan dikueri setiap kali salah satu file diklik kanan. Handler kemudian dapat menentukan item menu tambahan berdasarkan file demi file, daripada memiliki set yang sama untuk seluruh jenis file.

Dokumen ini membahas cara mengimplementasikan penanganan ekstensi yang memungkinkan Anda memodifikasi berbagai tindakan Shell. Penangan berikut dikaitkan dengan jenis file tertentu dan memungkinkan Anda menentukan berdasarkan file demi file:

Penghandel Deskripsi
Penangan menu pintasan Dipanggil sebelum menu pintasan file ditampilkan. Ini memungkinkan Anda untuk menambahkan item ke menu pintasan berdasarkan file demi file.
Penangan data Dipanggil saat operasi seret dan letakkan dilakukan pada objek dragShell. Ini memungkinkan Anda untuk menyediakan format clipboard tambahan ke target penghilangan.
Jatuhkan handler Dipanggil saat objek data diseret atau dijatuhkan pada file. Ini memungkinkan Anda untuk membuat file menjadi target penghilangan.
Handler ikon Dipanggil sebelum ikon file ditampilkan. Ini memungkinkan Anda mengganti ikon default file dengan ikon kustom berdasarkan file demi file.
Handler lembar properti Dipanggil sebelum lembar properti Properti objek ditampilkan. Ini memungkinkan Anda untuk menambahkan atau mengganti halaman.
Penangan Gambar Mini Menyediakan gambar untuk mewakili item.
Handler infotip Menyediakan teks pop-up saat pengguna mengarahkan penunjuk mouse ke atas objek.
Handler metadata Menyediakan akses baca dan tulis ke metadata (properti) yang disimpan dalam file. Ini dapat digunakan untuk memperluas tampilan Detail, infotip, halaman properti, dan fitur pengelompokan.

 

Handler lain tidak terkait dengan jenis file tertentu tetapi dipanggil sebelum beberapa operasi Shell:

Penghandel Deskripsi
Penangan kolom Dipanggil oleh Windows Explorer sebelum menampilkan tampilan Detail folder. Ini memungkinkan Anda untuk menambahkan kolom kustom ke tampilan Detail.
Salin handler hook Dipanggil ketika folder atau objek printer akan dipindahkan, disalin, dihapus, atau diganti namanya. Ini memungkinkan Anda menyetujui atau memveto operasi.
Penangan seret dan letakkan Dipanggil saat file diseret dengan tombol kanan mouse. Ini memungkinkan Anda untuk mengubah menu pintasan yang ditampilkan.
Handler Overlay Ikon Dipanggil sebelum ikon file ditampilkan. Ini memungkinkan Anda menentukan overlay untuk ikon file.
Penangan pencarian Dipanggil untuk meluncurkan mesin pencari. Ini memungkinkan Anda untuk mengimplementasikan mesin pencari kustom yang dapat diakses dari menu Mulai atau Windows Explorer.

 

Detail cara mengimplementasikan handler ekstensi tertentu tercakup dalam bagian yang tercantum di atas. Sisa dokumen ini mencakup beberapa masalah implementasi yang umum untuk semua penangan ekstensi Shell.

Menerapkan Handler Ekstensi Shell

Sebagian besar implementasi objek handler ekstensi Shell tergantung pada jenisnya. Namun, ada beberapa elemen umum. Bagian ini membahas aspek implementasi yang dibagikan oleh semua penangan ekstensi Shell.

Banyak penangan ekstensi Shell adalah objek Model Objek Komponen (COM) dalam proses. Mereka harus diberi GUID dan terdaftar seperti yang dijelaskan dalam Mendaftarkan Penangan Ekstensi Shell. Mereka diimplementasikan sebagai DLL dan harus mengekspor fungsi standar berikut:

  • DllMain. Titik masuk standar ke DLL.
  • DllGetClassObject. Mengekspos pabrik kelas objek.
  • DllCanUnloadNow. COM memanggil fungsi ini untuk menentukan apakah objek melayani klien mana pun. Jika tidak, sistem dapat membongkar DLL dan membebaskan memori terkait.

Seperti semua objek COM, handler ekstensi Shell harus mengimplementasikan antarmuka IUnknown dan pabrik kelas. Sebagian besar handler ekstensi juga harus mengimplementasikan antarmuka IPersistFile atau IShellExtInit di Windows XP atau yang lebih lama. Ini digantikan oleh IInitializeWithStream, IInitializeWithItem dan IInitializeWithFile di Windows Vista. Shell menggunakan antarmuka ini untuk menginisialisasi handler.

Antarmuka IPersistFile harus diimplementasikan dengan cara berikut:

  • Penangan data
  • Jatuhkan handler

Di masa lalu, handler ikon juga diperlukan untuk mengimplementasikan IPersistFile, tetapi ini tidak lagi benar. Untuk handler ikon, IPersistFile sekarang opsional dan antarmuka lain seperti IInitializeWithItem lebih disukai.

Antarmuka IShellExtInit harus diimplementasikan dengan cara berikut:

  • Penangan menu pintasan
  • Penangan seret dan letakkan
  • Handler lembar properti

Menerapkan IPersistFile

Antarmuka IPersistFile dimaksudkan untuk mengizinkan objek dimuat dari atau disimpan ke file disk. Ini memiliki enam metode selain IUnknown, lima dari sendiri, dan metode GetClassID yang diwarisi dari IPersist. Dengan ekstensi Shell, IPersist hanya digunakan untuk menginisialisasi objek handler ekstensi Shell. Karena biasanya tidak perlu membaca dari atau menulis ke disk, hanya metode GetClassID dan Load yang memerlukan implementasi nontoken.

Shell memanggil GetClassID terlebih dahulu, dan fungsi mengembalikan pengidentifikasi kelas (CLSID) dari objek handler ekstensi. Shell kemudian memanggil Muat dan meneruskan dua nilai. Yang pertama, pszFileName, adalah string Unicode dengan nama file atau folder tempat Shell akan beroperasi. Yang kedua adalah dwMode, yang menunjukkan mode akses file. Karena biasanya tidak perlu mengakses file, dwMode biasanya nol. Metode ini menyimpan nilai-nilai ini sesuai kebutuhan untuk referensi nanti.

Fragmen kode berikut menggambarkan bagaimana handler ekstensi Shell yang khas mengimplementasikan metode GetClassID dan Load . Ini dirancang untuk menangani ANSI atau Unicode. CLSID_SampleExtHandler adalah GUID objek handler ekstensi, dan CSampleExtHandler adalah nama kelas yang digunakan untuk mengimplementasikan antarmuka. Variabel m_szFileName dan m_dwMode adalah variabel privat yang digunakan untuk menyimpan nama file dan bendera akses.

wchar_t m_szFileName[MAX_PATH];    // The file name
DWORD m_dwMode;                  // The file access mode

CSampleExtHandler::GetClassID(CLSID *pCLSID)
{
    *pCLSID = CLSID_SampleExtHandler;
}

CSampleExtHandler::Load(PCWSTR pszFile, DWORD dwMode)
{
    m_dwMode = dwMode;
    return StringCchCopy(_szFileName, ARRAYSIZE(m_szFileName), pszFile);
}

Menerapkan IShellExtInit

Antarmuka IShellExtInit hanya memiliki satu metode, IShellExtInit::Initialize, selain IUnknown. Metode ini memiliki tiga parameter yang dapat digunakan Shell untuk meneruskan berbagai jenis informasi. Nilai yang diteruskan bergantung pada jenis handler, dan beberapa dapat diatur ke NULL.

  • pIDFolder menyimpan penunjuk folder ke daftar pengidentifikasi item (PIDL). Untuk ekstensi lembar properti, ini adalah NULL. Untuk ekstensi menu pintasan, ini adalah PIDL folder yang berisi item yang menu pintasannya sedang ditampilkan. Untuk penangan seret dan letakkan nondefault, ini adalah PIDL folder target.
  • pDataObject memegang penunjuk ke antarmuka IDataObject objek data. Objek data menyimpan satu atau beberapa nama file dalam format CF_HDROP .
  • hRegKey menyimpan kunci registri untuk objek file atau jenis folder.

Metode IShellExtInit::Initialize menyimpan nama file, penunjuk IDataObject , dan kunci registri sesuai kebutuhan untuk digunakan nanti. Fragmen kode berikut mengilustrasikan implementasi IShellExtInit::Initialize. Untuk kesederhanaan, contoh ini mengasumsikan bahwa objek data hanya berisi satu file. Secara umum, file mungkin berisi beberapa file yang masing-masing perlu diekstraksi.

LPCITEMIDLIST  m_pIDFolder;           //The folder's PIDL
wchar_t        m_szFile[MAX_PATH];    //The file name
IDataObject   *m_pDataObj;            //The IDataObject pointer
HKEY           m_hRegKey;             //The file or folder's registry key

STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST pIDFolder, 
                                   IDataObject *pDataObj, 
                                   HKEY hRegKey) 
{ 
    // If Initialize has already been called, release the old PIDL
    ILFree(m_pIDFolder);
    m_pIDFolder = nullptr;

    // Store the new PIDL.
    if (pIDFolder)
    {
        m_pIDFolder = ILClone(pIDFolder);
    }
    
    // If Initialize has already been called, release the old
    // IDataObject pointer.
    if (m_pDataObj)
    { 
        m_pDataObj->Release(); 
    }
     
    // If a data object pointer was passed in, save it and
    // extract the file name. 
    if (pDataObj) 
    { 
        m_pDataObj = pDataObj; 
        pDataObj->AddRef(); 
      
        STGMEDIUM   medium;
        FORMATETC   fe = {CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
        UINT        uCount;

        if (SUCCEEDED(m_pDataObj->GetData(&fe, &medium)))
        {
            // Get the count of files dropped.
            uCount = DragQueryFile((HDROP)medium.hGlobal, (UINT)-1, NULL, 0);

            // Get the first file name from the CF_HDROP.
            if (uCount)
                DragQueryFile((HDROP)medium.hGlobal, 0, m_szFile, 
                              sizeof(m_szFile)/sizeof(TCHAR));

            ReleaseStgMedium(&medium);
        }
    }

    // Duplicate the registry handle. 
    if (hRegKey) 
        RegOpenKeyEx(hRegKey, nullptr, 0L, MAXIMUM_ALLOWED, &m_hRegKey); 
    return S_OK; 
}

CSampleExtHandler adalah nama kelas yang digunakan untuk mengimplementasikan antarmuka. Variabel m_pIDFolder, m_pDataObject, m_szFileName, dan m_hRegKey adalah variabel privat yang digunakan untuk menyimpan informasi yang diteruskan. Untuk kesederhanaan, contoh ini mengasumsikan bahwa hanya satu nama file yang akan dipegang oleh objek data. Setelah struktur FORMATETC diambil dari objek data, DragQueryFile digunakan untuk mengekstrak nama file dari anggota medium.hGlobal struktur FORMATETC. Jika kunci registri diteruskan, metode menggunakan RegOpenKeyEx untuk membuka kunci dan menetapkan handel ke m_hRegKey.

Kustomisasi Infotip

Ada dua cara untuk mengkustomisasi infotip:

  • Terapkan objek yang mendukung IQueryInfo lalu daftarkan objek tersebut di bawah subkuntang yang tepat di registri (lihat Mendaftarkan Penangan Ekstensi Shell di bawah).
  • Tentukan string tetap atau daftar properti file tertentu yang akan ditampilkan.

Untuk menampilkan string tetap untuk ekstensi namespace, buat entri yang disebut InfoTip di kunci {CLSID} ekstensi namespace Anda. Atur nilai entri tersebut menjadi string literal yang ingin Anda tampilkan, seperti yang ditunjukkan dalam contoh ini, atau string tidak langsung yang menentukan sumber daya dan indeks dalam sumber daya tersebut (untuk tujuan pelokalan).

HKEY_CLASSES_ROOT
   CLSID
      {CLSID}
         InfoTip = InfoTip string for your namespace extension

Untuk menampilkan string tetap untuk jenis file, buat entri yang disebut InfoTip di kunci ProgID dari jenis file tersebut. Atur nilai entri tersebut menjadi string literal yang ingin Anda tampilkan atau string tidak langsung yang menentukan sumber daya dan indeks dalam sumber daya tersebut (untuk tujuan pelokalan), seperti yang ditunjukkan dalam contoh ini.

HKEY_CLASSES_ROOT
   ProgID
      InfoTip = Resource.dll, 3

Jika Anda ingin Shell menampilkan properti file tertentu di infotip untuk jenis file tertentu, buat entri yang disebut InfoTip di kunci ProgID untuk jenis file tersebut. Atur nilai entri tersebut menjadi daftar nama properti kanonis yang digambarkan titik koma, pasangan pengidentifikasi format (FMTID)/pengidentifikasi properti (PID), atau keduanya. Nilai ini harus dimulai dengan "prop:" untuk mengidentifikasinya sebagai string daftar properti. Jika Anda menghilangkan "prop:", nilainya terlihat sebagai string harfiah dan ditampilkan seperti itu.

Dalam contoh berikut, nama propname adalah nama properti kanonis (seperti System.Date) dan {fmtid},pid adalah pasangan FMTID/PID .

HKEY_CLASSES_ROOT
   ProgID
      InfoTip = prop:propname;propname;{fmtid},pid;{fmtid},pid

Nama properti berikut dapat digunakan:

Nama Properti Deskripsi Diambil Dari
Penulis Penulis dokumen PIDSI_AUTHOR
Judul Judul dokumen PIDSI_TITLE
Subjek Ringkasan subjek PIDSI_SUBJECT
Komentar Komentar dokumen PIDSI_COMMENT atau properti folder/driver
PageCount Jumlah halaman PIDSI_PAGECOUNT
Nama Nama yang mudah diingat Tampilan folder standar
OriginalLocation Lokasi file asli Folder tas kerja dan folder Keranjang Sampah
DateDeleted File tanggal dihapus Folder Keranjang Sampah
Jenis Jenis file Tampilan detail folder standar
Ukuran Ukuran file Tampilan detail folder standar
SyncCopyIn Sama seperti OriginalLocation Sama seperti OriginalLocation
Dimodifikasi Tanggal terakhir diubah Tampilan detail folder standar
Dibuat Tanggal dibuat Tampilan detail folder standar
Diakses Tanggal terakhir diakses Tampilan detail folder standar
InFolder Direktori yang berisi file Hasil pencarian dokumen
Pangkat Kualitas kecocokan pencarian Hasil pencarian dokumen
FreeSpace Ruang penyimpanan yang tersedia Disk drive
NumberOfVisits Jumlah kunjungan Folder favorit
Atribut Atribut File Tampilan detail folder standar
Perusahaan Nama perusahaan PIDDSI_COMPANY
Kategori Kategori dokumen PIDDSI_CATEGORY
Hak cipta Hak cipta media PIDMSI_COPYRIGHT
HTMLInfoTipFile File InfoTip HTML Desktop.ini file untuk folder

 

Meningkatkan pencarian Windows dengan Penangan Ekstensi Shell

Handler ekstensi shell dapat digunakan untuk meningkatkan pengalaman pengguna yang disediakan oleh penangan protokol Windows Search. Untuk mengaktifkan penyempurnaan tersebut, penangan ekstensi Shell pendukung harus dirancang untuk diintegrasikan dengan penangan protokol pencarian sebagai sumber data. Untuk informasi tentang cara meningkatkan penangan protokol Windows Search melalui integrasi dengan handler ekstensi Shell, lihat Menambahkan Ikon, Pratinjau, dan Menu Pintasan. Untuk informasi selengkapnya tentang penangan protokol Windows Search, lihat Mengembangkan Penangan Protokol.

Mendaftarkan Handler Ekstensi Shell

Objek handler ekstensi Shell harus didaftarkan sebelum Shell dapat menggunakannya. Bagian 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 dengan SHChangeNotify, menentukan peristiwa SHCNE_ASSOCCHANGED . Jika Anda tidak memanggil SHChangeNotify, perubahan mungkin tidak dikenali sampai sistem di-boot ulang.

Seperti semua objek COM, Anda harus membuat GUID untuk handler menggunakan alat seperti UUIDGEN.exe. Buat kunci di bawah HKEY_CLASSES_ROOT\CLSID yang namanya adalah bentuk string GUID. Karena handler ekstensi Shell adalah server dalam proses, Anda harus membuat kunci InProcServer32 di bawah kunci GUID dengan nilai default yang diatur ke jalur DLL handler. Gunakan model utas Apartemen.

Setiap kali Shell mengambil tindakan yang dapat melibatkan penangan ekstensi Shell, Shell memeriksa kunci registri yang sesuai. Kunci di mana handler ekstensi terdaftar sehingga 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 terdaftar di bawah kunci ProgID jenis file.

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 Objek Shell yang Ditentukan Sebelumnya).

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

HKEY_CLASSES_ROOT
   MyProgram.1
      ShellEx
         ContextMenuHandlers

Untuk handler berikut, buat subkunci di bawah kunci "Nama Subkunci Handler" yang namanya adalah versi string CLSID dari ekstensi Shell. Beberapa ekstensi dapat didaftarkan di bawah kunci nama subkunci handler dengan membuat beberapa subkunci.

Penghandel Antarmuka Nama Subkuntang Handler
Penangan menu pintasan IContextMenu ContextMenuHandlers
Handler copyhook ICopyHook CopyHookHandlers
Handler seret dan letakkan IContextMenu DragDropHandlers
Handler lembar properti IShellPropSheetExt PropertySheetHandlers
Handler penyedia kolom (tidak digunakan lagi di Windows Vista) IColumnProvider ColumnHandlers

 

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 IExtractImage {BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}
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 IPropertyStore PropertyHandler
Metadata IPropertySetStorage (tidak digunakan lagi di Windows Vista) 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 .

Dukungan untuk penangan penyedia kolom dihapus di Windows Vista. Juga, pada Windows Vista, IPropertySetStorage telah ditolak demi IPropertyStore.

Meskipun IExtractImage tetap didukung, IThumbnailProvider lebih disukai untuk Windows Vista dan yang lebih baru.

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 kunci 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 Versi
* Semua file Menu Pintasan, Lembar Properti, Kata Kerja (lihat di bawah) Semua
AllFileSystemObjects Semua file dan folder file Menu Pintasan, Lembar Properti, Kata Kerja 4,71
Folder Semua folder Menu Pintasan, Lembar Properti, Kata Kerja Semua
Direktori Folder file Menu Pintasan, Lembar Properti, Kata Kerja Semua
Direktori\Latar Belakang Latar belakang folder file Menu Pintasan saja 4,71
Drive Semua drive di MyComputer, seperti "C:\" Menu Pintasan, Lembar Properti, Kata Kerja Semua
Jaringan Seluruh jaringan (di bawah Tempat Jaringan Saya) Menu Pintasan, Lembar Properti, Kata Kerja Semua
Network\Type\ # Semua objek jenis # (lihat di bawah) Menu pintasan, Lembar Properti, Kata Kerja 4,71
NetShare Semua berbagi jaringan Menu pintasan, Lembar Properti, Kata Kerja 4,71
NetServer Semua server jaringan Menu pintasan, Lembar Properti, Kata Kerja 4,71
network_provider_name Semua objek yang disediakan oleh penyedia jaringan "network_provider_name" Menu pintasan, Lembar Properti, Kata Kerja Semua
Printer Semua printer Menu Pintasan, Lembar Properti Semua
AudioCD CD Audio di drive CD Kata kerja saja Semua
DVD Drive DVD (Windows 2000) Menu Pintasan, Lembar Properti, Kata Kerja 4,71

 

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 HKEY_CLASSES_ROOT\SubkeyShellVerb\\ .
  • Untuk NetworkType\\# , "#" 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 kunci jenis yang sesuai akan HKEY_CLASSES_ROOT\NetworkType51\\ .
  • "network_provider_name" adalah nama penyedia jaringan seperti yang ditentukan oleh WNetGetProviderName, dengan spasi dikonversi menjadi garis bawah. Misalnya, jika penyedia jaringan Jaringan Microsoft 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 kunci 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}

Prosedur pendaftaran yang dibahas di bagian ini harus diikuti untuk semua sistem Windows.

Panduan untuk Menerapkan Ekstensi In-Process