Bagikan melalui


Membuat Handler Ekstensi Shell

Kemampuan Shell dapat diperluas dengan entri registri dan file .ini. Meskipun pendekatan untuk memperluas Shell ini sederhana dan memadai untuk banyak tujuan, tetapi 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 melalui 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 diterapkan pada jenis file tertentu, file tersebut akan diperiksa setiap kali salah satu dari file-file tersebut 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 handler ekstensi yang memungkinkan Anda memodifikasi berbagai tindakan Shell. Pengelola berikut dikaitkan dengan jenis file tertentu dan memungkinkan Anda menentukan secara individual pada setiap file:

Handler Deskripsi
Penangan menu pintasan Dipanggil sebelum menu pintasan file ditampilkan. Ini memungkinkan Anda untuk menambahkan item ke menu pintasan berdasarkan file demi file.
pengelola data Dipanggil saat operasi drag-and-drop dilakukan pada objek dragShell. Ini memungkinkan Anda untuk menyediakan format clipboard tambahan ke target drop.
Penangan Drop Dipanggil saat objek data diseret di atas atau dijatuhkan pada file. Ini memungkinkan Anda untuk menjadikan sebuah file sebagai target penempatan.
handler ikon Dipanggil sebelum ikon file ditampilkan. Ini memungkinkan Anda mengganti ikon default file dengan ikon kustom berdasarkan file demi file.
pengelola lembar properti Dipanggil sebelum lembar properti objek Properties ditampilkan. Ini memungkinkan Anda untuk menambahkan atau mengganti halaman.
penanganan Gambar Mini Menyediakan gambar untuk mewakili item.
Infotip handler Menyediakan teks pop-up saat pengguna mengarahkan penunjuk mouse ke atas objek.
pengelola 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:

Pengelola Deskripsi
penangan kolom Dipanggil oleh Windows Explorer sebelum menampilkan tampilan Detail folder. Ini memungkinkan Anda menambahkan kolom kustom ke tampilan Detail.
Penangan hook salin Dipanggil ketika folder atau objek printer akan dipindahkan, disalin, dihapus, atau diganti namanya. Ini memungkinkan Anda menyetujui atau memveto operasi.
handler Seret dan letakkan Dipanggil ketika sebuah file diseret menggunakan tombol kanan mouse. Ini memungkinkan Anda untuk mengubah menu pintasan yang ditampilkan.
Pengendali Overlay Ikon Dipanggil sebelum ikon file ditampilkan. Ini memungkinkan Anda menentukan overlay untuk ikon file.
Penanganan Pencarian Dipanggil untuk meluncurkan mesin pencari. Ini memungkinkan Anda menerapkan 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 pengendali ekstensi Shell.

Menerapkan Pengendali Ekstensi Shell

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

Banyak penangan ekstensi Shell adalah objek Model Objek Komponen (COM) yang dijalankan dalam proses. Mereka harus diberi GUID dan terdaftar seperti yang dijelaskan dalam dokumen "Registering Shell Extension Handlers". Mereka diimplementasikan sebagai DLL dan harus mengekspor fungsi standar berikut:

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

Seperti semua objek COM, penangan ekstensi Shell harus menerapkan antarmukaIUnknowndan pabrik kelas . Kebanyakan penangan ekstensi harus juga menerapkan 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.

AntarmukaIPersistFile harus diimplementasikan dengan cara berikut:

  • Pengelola data
  • Jatuhkan handler

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

Antarmuka IShellExtInit harus diimplementasikan oleh yang berikut:

  • Pengelola menu pintasan
  • Penangan seret dan letakkan
  • Penganan lembar properti

Menerapkan IPersistFile

AntarmukaIPersistFile dimaksudkan untuk mengizinkan objek dimuat dari atau disimpan ke file disk. Ini memiliki enam metode selain IUnknown, lima metode miliknya 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 sebuah fungsi mengembalikan pengidentifikasi kelas (CLSID) dari objek penangan ekstensi. Kemudian, Shell memanggil Load 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 menyimpan nilai-nilai ini sesuai kebutuhan untuk referensi nanti.

Fragmen kode berikut menggambarkan bagaimana handler ekstensi Shell umum mengimplementasikan metodeGetClassID 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

AntarmukaIShellExtInithanya 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, NULL. Untuk ekstensi menu pintasan, ini adalah PIDL dari folder yang berisi item yang menu pintasannya ditampilkan. Untuk handler seret dan letakkan nondefault, ini adalah PIDL dari folder target.
  • pDataObject menyimpan pointer ke antarmuka IDataObjectdari 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, mungkin berisi beberapa file yang masing-masing perlu diekstrak.

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 strukturFORMATETCdiambil dari objek data, DragQueryFile digunakan untuk mengekstrak nama file dari FORMATETC struktur medium.hGlobal. Jika kunci registri diteruskan, metode menggunakan RegOpenKeyEx untuk membuka kunci dan menetapkan handle pada m_hRegKey.

Kustomisasi Infotip

Ada dua cara untuk mengkustomisasi infotip:

  • Terapkan objek yang mendukung IQueryInfo lalu daftarkan objek tersebut di bawah subkunci 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 {CLSID} kunci ekstensi namespace Anda. Atur nilai entri tersebut menjadi string harfiah 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 harfiah 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 dipisahkan oleh 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, 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
Pengarang Penulis dokumen PIDSI_AUTHOR
Titel Judul dokumen PIDSI_TITLE
Subyek Ringkasan subjek PIDSI_SUBJECT
Komentar Komentar dokumen PIDSI_COMMENT atau properti folder/pengandar
Jumlah Halaman Jumlah halaman PIDSI_PAGECOUNT
Nama Nama yang ramah Tampilan folder standar
Lokasi Asli Lokasi file asli Folder tas kerja dan folder Keranjang Sampah
Tanggal Dihapus File tanggal dihapus Folder Tempat Sampah
Jenis Tipe file Tampilan rincian untuk folder standar
Ukuran Ukuran file Tampilan detail folder standar
SyncCopyIn Sama seperti OriginalLocation Sama seperti OriginalLocation
Diubah Tanggal terakhir diubah Tampilan detail folder standar
Dibuat Tanggal dibuat Tampilan folder dengan detail standar
Diakses Tanggal terakhir diakses Tampilan detail folder standar
InFolder Direktori yang berisi file Hasil pencarian dokumen
Pangkat Kualitas kecocokan pencarian Hasil pencarian dokumen
RuangBebas Ruang penyimpanan yang tersedia Disk drive
JumlahKunjungan Jumlah kunjungan Folder Favorit
Atribut Atribut Berkas Tampilan detail folder standar
Firma Nama perusahaan PIDDSI_COMPANY
Kategori Kategori dokumen PIDDSI_CATEGORY
Hak cipta Hak cipta media PIDMSI_COPYRIGHT
HTMLInfoTipFile File InfoTip HTML Desktop.ini file di dalam folder

 

Meningkatkan Pencarian Windows dengan Handler Ekstensi Shell

Handler ekstensi Shell dapat digunakan untuk meningkatkan pengalaman pengguna yang disediakan oleh handler protokol Windows Search. Untuk mengaktifkan peningkatan tersebut, handler ekstensi Shell yang mendukung harus dirancang untuk diintegrasikan dengan handler protokol pencarian sebagai sumber data. Untuk informasi tentang cara meningkatkan handler 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 Penangan Ekstensi Shell

Objek handler ekstensi Shell harus didaftarkan sebelum Shell dapat menggunakannya. Bagian ini adalah pembahasan 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, dengan menetapkan 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 dalam 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 handler ekstensi Shell, Shell memeriksa kunci registri yang sesuai. Kunci di mana handler ekstensi terdaftar dengan demikian mengontrol kapan akan dipanggil. Misalnya, merupakan praktik umum untuk memiliki pengelola menu pintas 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 ekstensi pengendali Shell, buat subkunci dengan nama subkunci pengendali (lihat di bawah) di bawah subkunci ShellEx dari ProgID (untuk jenis file) atau nama jenis objek Shell (untuk Objek Shell yang Telah Ditentukan).

Misalnya, jika Anda ingin mendaftarkan handler 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 dari CLSID ekstensi Shell. Beberapa ekstensi dapat didaftarkan di bawah kunci nama subkunci handler dengan membuat beberapa subkunci.

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

 

Untuk handler berikut, nilai default kunci "Nama Subkunci 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
Drop handler IDropTarget DropHandler
Handler ikon IExtractIcona/W IconHandler
Pengelola gambar IExtractImage {BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}
Pengelola gambar miniatur 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 IPropertyStore PengelolaProperti
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 pada menu pintasan item hanya diperlukan untuk jenis file yang menyertakan entri IsShortCut.

Dukungan untuk pengelola penyedia kolom telah dihapus di Windows Vista. Selain itu, sejak Windows Vista, IPropertySetStorage telah dihapuskan demi IPropertyStore.

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

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 handler lembar properti untuk semua file, Anda dapat mendaftar di bawah kunci PropertySheetHandlers.

HKEY_CLASSES_ROOT
   *
      shellex
         PropertySheetHandlers

Tabel berikut memberikan berbagai subkunci HKEY_CLASSES_ROOT tempat handler ekstensi dapat didaftarkan. 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 Versi
* Semua file Menu Pintasan, Lembar Properti, Kata Kerja (lihat di bawah) Semua
SemuaObjekSistemFile Semua file dan folder 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
Directory\Latar Belakang Gambar latar folder file Menu Pintasan saja 4.71
Drive Semua drive di komputer saya, 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, Lembaran 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 melalui konten folder mana pun.
  • "Verb" adalah perintah khusus yang terdaftar di bawah HKEY_CLASSES_ROOT\Subkey\Shell\Verb .
  • Untuk Jaringan\Jenis\# , "#" adalah kode tipe 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_*). Contohnya, WNNC_NET_SHIVA adalah 0x00330000, sehingga kunci jenis yang sesuai akan HKEY_CLASSES_ROOT\Jaringan\Jenis\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 terpasang, nama penyedianya adalah "Microsoft Windows Network", dan network_provider_name yang sesuai adalah 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 subkunci jenis itu. Atur nilai default subkunci nama ke representasi string GUID milik 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 In-Process Ekstensi