Membuat Penangan Menu Pintasan

Penangan menu pintasan, juga dikenal sebagai penangan menu konteks atau penangan kata kerja, adalah jenis penangan jenis file. Handler ini dapat mengalami impelmentasi dengan cara yang menyebabkan mereka memuat dalam proses mereka sendiri atau di penjelajah, atau proses pihak ke-3 lainnya. Berhati-hatilah saat membuat handler dalam proses karena dapat membahayakan proses yang memuatnya.

Catatan

Ada pertimbangan khusus untuk versi Windows berbasis 64-bit saat mendaftarkan handler yang berfungsi dalam konteks aplikasi 32-bit: ketika dipanggil dalam konteks aplikasi bitness yang berbeda, subsistem WOW64 mengalihkan akses sistem file ke beberapa jalur. Jika handler .exe Anda disimpan di salah satu jalur tersebut, handler tersebut tidak dapat diakses dalam konteks ini. Oleh karena itu, sebagai pekerjaan, simpan .exe Anda di jalur yang tidak dialihkan, atau simpan versi stub .exe Anda yang meluncurkan versi nyata.

Topik ini diatur sebagai berikut:

Kata Kerja Kanonis

Aplikasi umumnya bertanggung jawab untuk menyediakan string tampilan yang dilokalkan untuk kata kerja yang ditentukan. Namun, untuk memberikan tingkat kemandirian bahasa, sistem mendefinisikan serangkaian standar kata kerja yang umum digunakan yang disebut kata kerja kanonis. Kata kerja kanonis tidak pernah ditampilkan kepada pengguna, dan dapat digunakan dengan bahasa UI apa pun. Sistem menggunakan nama kanonis untuk secara otomatis menghasilkan string tampilan yang dilokalkan dengan benar. Misalnya, string tampilan kata kerja terbuka diatur ke Buka pada sistem bahasa Inggris, dan ke bahasa Jerman yang setara pada sistem Jerman.

Kata kerja kanonis Deskripsi
Open Membuka file atau folder.
Bukabaru Membuka file atau folder di jendela baru.
Cetak Mencetak file.
Printto Mengizinkan pengguna mencetak file dengan menyeretnya ke objek printer.
Jelajahi Membuka Windows Explorer dengan folder terpilih.
Properti Membuka lembar properti objek.

Catatan

Kata kerja Printto juga kanonis, tetapi tidak pernah ditampilkan. Penyertaannya memungkinkan pengguna mencetak file dengan menyeretnya ke objek printer.

Penangan menu pintasan dapat menyediakan kata kerja kanonis mereka sendiri melalui IContextMenu::GetCommandString dengan GCS_VERBW, atau GCS_VERBA. Sistem akan menggunakan kata kerja kanonis sebagai parameter kedua (lpOperation) yang diteruskan ke ShellExecute, dan merupakan CMINVOKECOMMANDINFO. Anggota lpVerb diteruskan ke metode IContextMenu::InvokeCommand .

Kata Kerja yang Diperluas

Saat pengguna mengklik kanan objek, menu pintasan menampilkan kata kerja default. Anda mungkin ingin menambahkan dan mendukung perintah pada beberapa menu pintasan yang tidak ditampilkan pada setiap menu pintasan. Misalnya, Anda dapat memiliki perintah yang tidak umum digunakan atau yang ditujukan untuk pengguna berpengalaman. Untuk alasan ini, Anda juga dapat menentukan satu atau beberapa kata kerja yang diperluas. Kata kerja ini mirip dengan kata kerja normal, tetapi dibedakan dari kata kerja normal dengan cara mereka terdaftar. Untuk memiliki akses ke kata kerja yang diperluas, pengguna harus mengklik kanan objek saat menekan tombol SHIFT. Ketika pengguna melakukannya, kata kerja yang diperluas ditampilkan selain kata kerja default.

Anda dapat menggunakan registri untuk menentukan satu atau beberapa kata kerja yang diperluas. Perintah terkait hanya akan ditampilkan saat pengguna mengklik kanan objek sekaligus menekan tombol SHIFT. Untuk menentukan kata kerja sebagai diperluas, tambahkan nilai REG_SZ "diperluas" ke subkuntah kata kerja. Nilai seharusnya tidak memiliki data apa pun yang terkait dengannya.

Kata Kerja Khusus Akses Terprogram

Kata kerja ini tidak pernah ditampilkan dalam menu konteks. Ini dapat diakses dengan menggunakan ShellExecuteEx dan menentukan bidang lpVerb dari parameter pExecInfo (objek SHELLEXECUTEINFO ). Untuk menentukan kata kerja sebagai akses terprogram saja, tambahkan nilai REG_SZ "ProgrammaticAccessOnly" ke subkunjud kata kerja. Nilai seharusnya tidak memiliki data apa pun yang terkait dengannya.

Anda dapat menggunakan registri untuk menentukan satu atau beberapa kata kerja yang diperluas. Perintah terkait hanya akan ditampilkan saat pengguna mengklik kanan objek sekaligus menekan tombol SHIFT. Untuk menentukan kata kerja sebagai diperluas, tambahkan nilai REG_SZ "diperluas" ke subkuntah kata kerja. Nilai seharusnya tidak memiliki data apa pun yang terkait dengannya.

Menyesuaikan Menu Pintasan Menggunakan Kata Kerja Statis

Setelah Memilih Kata Kerja Statis atau Dinamis untuk Menu Pintasan, Anda dapat memperluas menu pintasan untuk jenis file dengan mendaftarkan kata kerja statis untuk jenis file. Untuk melakukannya, tambahkan subkuntah Shell di bawah subkunjuk untuk ProgID aplikasi yang terkait dengan jenis file. Secara opsional, Anda dapat menentukan kata kerja default untuk jenis file dengan menjadikannya nilai default subkuntah Shell .

Kata kerja default ditampilkan terlebih dahulu pada menu pintasan. Tujuannya adalah untuk menyediakan Shell dengan kata kerja yang dapat digunakan ketika fungsi ShellExecuteEx dipanggil, tetapi tidak ada kata kerja yang ditentukan. Shell tidak selalu memilih kata kerja default ketika ShellExecuteEx digunakan dalam mode ini.

Shell menggunakan kata kerja pertama yang tersedia dalam urutan berikut:

  1. Kata kerja default
  2. Kata kerja pertama dalam registri, jika urutan kata kerja ditentukan
  3. Kata kerja Buka
  4. Kata kerja Buka Dengan

Jika tidak ada kata kerja yang tercantum yang tersedia, operasi gagal.

Buat satu subkunci untuk setiap kata kerja yang ingin Anda tambahkan di bawah subkunci Shell. Masing-masing subkunci ini harus memiliki nilai REG_SZ yang diatur ke string tampilan kata kerja (string yang dilokalkan). Untuk setiap subkunci kata kerja, buat subkunci perintah dengan nilai default yang diatur ke baris perintah untuk mengaktifkan item. Untuk kata kerja kanonis, seperti Buka dan Cetak, Anda dapat menghilangkan string tampilan karena sistem secara otomatis menampilkan string yang dilokalkan dengan benar. Untuk kata kerja nonkanonis, jika Anda menghilangkan string tampilan, string kata kerja ditampilkan.

Dalam contoh registri berikut, perhatikan bahwa:

  • Karena Doit bukan kata kerja kanonis, doit diberi nama tampilan, yang dapat dipilih dengan menekan tombol D.
  • Kata kerja Printto tidak muncul pada menu pintasan. Namun, penyertaannya dalam registri memungkinkan pengguna untuk mencetak file dengan menjatuhkannya pada ikon printer.
  • Satu subkunjuk ditampilkan untuk setiap kata kerja. %1 mewakili nama file dan %2 nama printer.
HKEY_CLASSES_ROOT
   .myp-ms
      (Default) = MyProgram.1
   MyProgram.1
      (Default) = My Program Application
      Shell
         (Default) = doit
         doit
            (Default) = &Do It
            command
               (Default) = c:\MyDir\MyProgram.exe /d "%1"
         open
            command
               (Default) = c:\MyDir\MyProgram.exe /d "%1"
         print
            command
               (Default) = c:\MyDir\MyProgram.exe /p "%1"
         printto
            command
               (Default) = c:\MyDir\MyProgram.exe /p "%1" "%2"

Diagram berikut mengilustrasikan ekstensi menu pintasan sesuai dengan entri registri di atas. Menu pintasan ini memiliki kata kerja Buka, Lakukan, dan Cetak pada menunya, dengan Do It sebagai kata kerja default.

cuplikan layar dari menu pintasan kata kerja default

Mengaktifkan Handler Anda Menggunakan Antarmuka IDropTarget

Dynamic Data Exchange (DDE) tidak digunakan lagi; gunakan IDropTarget sebagai gantinya. IDropTarget lebih kuat dan memiliki dukungan aktivasi yang lebih baik karena menggunakan aktivasi COM dari handler. Dalam kasus beberapa pilihan item, IDropTarget tidak tunduk pada pembatasan ukuran buffer yang ditemukan di DDE dan CreateProcess. Selain itu, item diteruskan ke aplikasi sebagai objek data yang dapat dikonversi ke array item dengan menggunakan fungsi SHCreateShellItemArrayFromDataObject . Melakukannya lebih sederhana, dan tidak kehilangan informasi namespace seperti yang terjadi ketika item dikonversi ke jalur untuk protokol baris perintah atau DDE.

Untuk informasi selengkapnya tentang kueri IDropTarget dan Shell untuk atribut asosiasi file, lihat Jenis yang Dirasakan dan Pendaftaran Aplikasi.

Menentukan Posisi dan Urutan Kata Kerja Statis

Biasanya kata kerja dipesan pada menu pintasan berdasarkan bagaimana mereka dijumlahkan; enumerasi didasarkan terlebih dahulu pada urutan array asosiasi, lalu pada urutan item dalam array asosiasi, seperti yang ditentukan oleh urutan pengurutan registri.

Kata kerja dapat diurutkan dengan menentukan nilai default subkunci Shell untuk entri asosiasi. Nilai default ini dapat mencakup satu item, yang akan ditampilkan di posisi atas menu pintasan, atau daftar item yang dipisahkan oleh spasi atau koma. Dalam kasus terakhir, item pertama dalam daftar adalah item default, dan kata kerja lainnya ditampilkan tepat di bawahnya dalam urutan yang ditentukan.

Misalnya, entri registri berikut menghasilkan kata kerja menu pintasan dalam urutan berikut:

  1. Tampilan
  2. Gadget
  3. Personalisasi
HKEY_CLASSES_ROOT
   DesktopBackground
      Shell
         Display
         Gadgets
         Personalization

Demikian pula, entri registri berikut menghasilkan kata kerja menu pintasan dalam urutan berikut:

  1. Personalisasi
  2. Gadget
  3. Tampilan
HKEY_CLASSES_ROOT
   DesktopBackground
      Shell = "Personalization,Gadgets"
      Display

Kata Kerja Penempatan di Bagian Atas atau Bawah Menu

Atribut registri berikut dapat digunakan untuk menempatkan kata kerja di bagian atas atau bawah menu. Jika ada beberapa kata kerja yang menentukan atribut ini, maka yang terakhir untuk melakukannya mendapatkan prioritas:

Position=Top | Bottom 

Membuat Menu Kaskading Statis

Di Windows 7 dan yang lebih baru, implementasi menu bertingkat didukung melalui pengaturan registri. Sebelum Windows 7, pembuatan menu berjenjang hanya dimungkinkan melalui implementasi antarmuka IContextMenu . Di Windows 7 dan yang lebih baru, Anda harus menggunakan solusi berbasis kode COM hanya ketika metode statis tidak mencukupi.

Cuplikan layar berikut memberikan contoh menu bertingkat.

cuplikan layar memperlihatkan contoh menu bertingkat

Di Windows 7 dan yang lebih baru, ada tiga cara untuk membuat menu berkaskala:

Membuat Menu Bertingkat dengan Entri Registri SubKommands

Di Windows 7 dan yang lebih baru, Anda dapat menggunakan entri SubKomand untuk membuat menu berskala dengan menggunakan prosedur berikut.

Untuk membuat menu berskala dengan menggunakan entri SubCommands

  1. Buat subkunci di bawah shell HKEY_CLASSES_ROOT\ProgID\ untuk mewakili menu berjenjang Anda. Dalam contoh ini, kami memberi subkunjud ini nama CascadeTest. Pastikan bahwa nilai default subkuntah CascadeTest kosong, dan ditampilkan sebagai (nilai tidak diatur).

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest
                (Default)
    
  2. Ke subkey CascadeTest Anda, tambahkan entri jenis MUIVerb REG_SZ dan tetapkan teks yang akan muncul sebagai namanya pada menu pintasan. Dalam contoh ini, kami menetapkannya "Test Cascade Menu".

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest
                (Default)
                MUIVerb = Test Cascade Menu
    
  3. Ke subkunci CascadeTest Anda, tambahkan entri jenis SubCommands REG_SZ yang ditetapkan daftar, dibatasi oleh titik koma, dari kata kerja yang akan muncul di menu, dalam urutan penampilan. Misalnya, di sini kami menetapkan sejumlah kata kerja yang disediakan sistem:

    HKEY_CLASSES_ROOT
       *
          Shell
             CascadeTest
                SubCommands
                Windows.delete;Windows.properties;Windows.rename;Windows.cut;Windows.copy;Windows.paste
    
  4. Dalam kasus kata kerja kustom, terapkan menggunakan salah satu metode implementasi kata kerja statis dan cantumkan di bawah subkuntah CommandStore seperti yang ditunjukkan dalam contoh ini untuk kata kerja fiktif VerbName:

    HKEY_LOCAL_MACHINE
       Software
          Microsoft
             Windows
                CurrentVersion
                   Explorer
                      CommandStore
                         Shell
                            VerbName
                            command
                               (Default) = notepad.exe %1
    

Catatan

Metode ini memiliki keuntungan bahwa kata kerja kustom dapat didaftarkan sekali dan digunakan kembali dengan mencantumkan nama kata kerja di bawah entri SubCommands. Namun, ini mengharuskan aplikasi memiliki izin untuk memodifikasi registri di bawah HKEY_LOCAL_MACHINE.

 

Membuat Menu Bertingkat dengan Entri Registri ExtendedSubCommandsKey

Di Windows 7 dan yang lebih baru, Anda dapat menggunakan entri ExtendedSubCommandKey untuk membuat menu kaskading yang diperluas: menu kaskading dalam menu kaskading.

Cuplikan layar berikut adalah contoh menu bertingkat yang diperluas.

cuplikan layar memperlihatkan menu kaskading yang diperluas untuk perangkat

Karena HKEY_CLASSES_ROOT adalah kombinasi dari HKEY_CURRENT_USER dan HKEY_LOCAL_MACHINE, Anda dapat mendaftarkan kata kerja kustom apa pun di bawah subkunciKelasPerangkat Lunak\HKEY_CURRENT_USER\. Keuntungan utama dari melakukannya adalah bahwa izin yang ditingkatkan tidak diperlukan. Selain itu, asosiasi file lain dapat menggunakan kembali seluruh set kata kerja ini dengan menentukan subkunci ExtendedSubCommandsKey yang sama. Jika Anda tidak perlu menggunakan kembali kumpulan kata kerja ini, Anda dapat mencantumkan kata kerja di bawah induk, tetapi memastikan bahwa nilai Default induk kosong.

Untuk membuat menu kaskading dengan menggunakan entri ExtendedSubCommandsKey

  1. Buat subkunci di bawah shell HKEY_CLASSES_ROOT\ProgID\ untuk mewakili menu berjenjang Anda. Dalam contoh ini, kami memberi subkunjud ini nama CascadeTest2. Pastikan bahwa nilai default subkuntah CascadeTest kosong, dan ditampilkan sebagai (nilai tidak diatur).

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest2
                (Default)
    
  2. Ke subkey CascadeTest Anda, tambahkan entri jenis MUIVerb REG_SZ dan tetapkan teks yang akan muncul sebagai namanya pada menu pintasan. Dalam contoh ini, kami menetapkannya "Test Cascade Menu".

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest
                (Default)
                MUIVerb = Test Cascade Menu 2
    
  3. Di bawah subkunci CascadeTest yang telah Anda buat, tambahkan subkunci ExtendedSubCommandsKey , lalu tambahkan subperintah dokumen (dari jenis REG_SZ ); misalnya:

    HKEY_CLASSES_ROOT
       txtfile
          Shell
             Test Cascade Menu 2
                (Default)
                ExtendedSubCommandsKey
                   Layout
                   Properties
                   Select all
    

    Pastikan bahwa nilai default subkuntang Test Cascade Menu 2 kosong, dan ditampilkan sebagai (nilai tidak diatur).

  4. Isi subverb menggunakan salah satu implementasi kata kerja statis berikut. Perhatikan bahwa subkunci CommandFlags mewakili nilai EXPCMDFLAGS. Jika Anda ingin menambahkan pemisah sebelum atau sesudah item menu kaskade, gunakan ECF_SEPARATORBEFORE (0x20) atau ECF_SEPARATORAFTER (0x40). Untuk deskripsi bendera Windows 7 dan yang lebih baru ini, lihat IExplorerCommand::GetFlags. ECF_SEPARATORBEFORE hanya berfungsi untuk item menu tingkat atas. MUIVerb berjenis REG_SZ, dan CommandFlags berjenis REG_DWORD.

    HKEY_CLASSES_ROOT
       txtile
          Shell
             Test Cascade Menu 2
                (Default)
                ExtendedSubCommandsKey
                   Shell
                      cmd1
                         MUIVerb = Notepad
                         command
                            (Default) = %SystemRoot%\system32\notepad.exe %1
                      cmd2
                         MUIVerb = Wordpad
                         CommandFlags = 0x20
                         command
                            (Default) = "C:\Program Files\Windows NT\Accessories\wordpad.exe" %1
    

Cuplikan layar berikut adalah ilustrasi contoh entri kunci registri sebelumnya.

cuplikan layar memperlihatkan contoh menu bertingkat yang memperlihatkan pilihan notepad dan wordpad

Membuat Menu Kaskading dengan Antarmuka IExplorerCommand

Opsi lain untuk menambahkan kata kerja ke menu kaskade adalah melalui IExplorerCommand::EnumSubCommands. Metode ini memungkinkan sumber data yang menyediakan perintah modul perintahnya melalui IExplorerCommandProvider untuk menggunakan perintah tersebut sebagai kata kerja pada menu pintasan. Di Windows 7 dan yang lebih baru, Anda dapat menyediakan implementasi kata kerja yang sama menggunakan IExplorerCommand seperti yang Anda bisa dengan IContextMenu.

Dua cuplikan layar berikut mengilustrasikan penggunaan menu bertingkat di folder Perangkat .

Cuplikan layar yang memperlihatkan contoh menu kaskading di folder perangkat.

Cuplikan layar berikut mengilustrasikan implementasi lain dari menu bertingkat di folder Perangkat .

cuplikan layar memperlihatkan contoh menu bertingkat di folder perangkat

Catatan

Karena IExplorerCommand hanya mendukung aktivasi dalam proses, disarankan untuk digunakan oleh sumber data Shell yang perlu berbagi implementasi antara perintah dan menu pintasan.

 

Mendapatkan Perilaku Dinamis untuk Kata Kerja Statis dengan Menggunakan Sintaks Kueri Tingkat Lanjut

Advanced Query Syntax (AQS) dapat mengekspresikan kondisi yang akan dievaluasi menggunakan properti dari item yang digunakan kata kerja. Sistem ini hanya berfungsi dengan properti cepat. Ini adalah properti yang dilaporkan sumber data Shell secepat dengan tidak mengembalikan SHCOLSTATE_SLOW dari IShellFolder2::GetDefaultColumnState.

Windows 7 dan yang lebih baru mendukung nilai kanonis yang menghindari masalah pada build yang dilokalkan. Sintaksis kanonis berikut diperlukan pada build yang dilokalkan untuk memanfaatkan peningkatan Windows 7 ini.

System.StructuredQueryType.Boolean#True

Dalam contoh entri registri berikut:

  • Nilai AppliesTo mengontrol apakah kata kerja ditampilkan atau disembunyikan.
  • Nilai DefaultAppliesTo mengontrol kata kerja mana yang merupakan default.
  • Nilai HasLUAShield mengontrol apakah perisai Kontrol Akun Pengguna (UAC) ditampilkan.

Dalam contoh ini, nilai DefaultAppliesTo menjadikan kata kerja ini default untuk file apa pun dengan kata "exampleText1" dalam nama filenya. Nilai AppliesTo memungkinkan kata kerja untuk file apa pun dengan "exampleText1" dalam nama. Nilai HasLUAShield menampilkan perisai untuk file dengan "exampleText2" dalam nama.

HKEY_CLASSES_ROOT
   txtile
      shell
         test.verb
            DefaultAppliesTo = System.ItemName:"exampleText1"
            HasLUAShield = System.ItemName:"exampleText2"
            AppliesTo = System.ItemName:"exampleText1"

Tambahkan subkuntah Perintah , dan nilai:

HKEY_CLASSES_ROOT
   txtile
      shell
         test.verb
            Command
               (Default) = %SystemRoot%\system32\notepad.exe %1

Di registri Windows 7, lihat drive HKEY_CLASSES_ROOT\sebagai contoh kata kerja bitlocker yang menggunakan pendekatan berikut:

  • AppliesTo = System.Volume.BitlockerProtection:=2
  • System.Volume.BitlockerRequiresAdmin:=System.StructuredQueryType.Boolean#True

Untuk informasi selengkapnya tentang AQS, lihat Sintaks Kueri Tingkat Lanjut.

Tidak digunakan lagi: Mengaitkan Kata Kerja dengan Perintah Pertukaran Data Dinamis

DDE tidak digunakan lagi; gunakan IDropTarget sebagai gantinya. DDE tidak digunakan lagi karena bergantung pada pesan jendela siaran untuk menemukan server DDE. Server DDE menggantung menyimpan pesan jendela siaran dan dengan demikian menggantung percakapan DDE untuk aplikasi lain. Adalah umum bagi satu aplikasi yang macet untuk menyebabkan macet berikutnya di seluruh pengalaman pengguna.

Metode IDropTarget lebih kuat dan memiliki dukungan aktivasi yang lebih baik karena menggunakan aktivasi COM handler. Dalam kasus beberapa pilihan item, IDropTarget tidak tunduk pada pembatasan ukuran buffer yang ditemukan di DDE dan CreateProcess. Selain itu, item diteruskan ke aplikasi sebagai objek data yang dapat dikonversi ke array item dengan menggunakan fungsi SHCreateShellItemArrayFromDataObject . Melakukannya lebih sederhana, dan tidak kehilangan informasi namespace seperti yang terjadi ketika item dikonversi ke jalur untuk protokol baris perintah atau DDE.

Untuk informasi selengkapnya tentang kueri IDropTarget dan Shell untuk atribut asosiasi file, lihat Jenis yang Dirasakan dan Pendaftaran Aplikasi.

Menyelesaikan Tugas Implementasi Kata Kerja

Tugas-tugas berikut untuk menerapkan kata kerja relevan dengan implementasi kata kerja statis dan dinamis. Untuk informasi selengkapnya tentang kata kerja dinamis, lihat Menyesuaikan Menu Pintasan Menggunakan Kata Kerja Dinamis.

Menyesuaikan Menu Pintasan untuk Objek Shell yang Telah Ditentukan Sebelumnya

Banyak objek Shell yang telah ditentukan sebelumnya memiliki menu pintasan yang dapat disesuaikan. Daftarkan perintah dengan cara yang sama seperti Anda mendaftarkan jenis file umum, tetapi gunakan nama objek yang telah ditentukan sebelumnya sebagai nama jenis file.

Daftar objek yang telah ditentukan sebelumnya ada di bagian Objek Shell yang telah ditentukan sebelumnya dari Membuat Penangan Ekstensi Shell. Objek Shell yang telah ditentukan sebelumnya yang menu pintasannya dapat disesuaikan dengan menambahkan kata kerja di registri ditandai dalam tabel dengan kata Kata Kerja.

Memperluas Submenu Baru

Saat pengguna membuka menu File di Windows Explorer, salah satu perintah yang ditampilkan adalah Baru. Memilih perintah ini menampilkan submenu. Secara default, submenu berisi dua perintah, Folder dan Pintasan, yang memungkinkan pengguna untuk membuat subfolder dan pintasan. Submenu ini dapat diperluas untuk menyertakan perintah pembuatan file untuk jenis file apa pun.

Untuk menambahkan perintah pembuatan file ke submenu Baru , file aplikasi Anda harus memiliki jenis file terkait. Sertakan subkunjud ShellNew di bawah nama file. Saat perintah Baru menu File dipilih, Shell menambahkan jenis file ke submenu Baru. String tampilan perintah adalah string deskriptif yang ditetapkan ke ProgID program.

Untuk menentukan metode pembuatan file, tetapkan satu atau beberapa nilai data ke subkunci ShellNew . Nilai yang tersedia tercantum dalam tabel berikut ini.

Nilai subkunjang ShellNew Deskripsi
Perintah Menjalankan aplikasi. Nilai REG_SZ ini menentukan jalur aplikasi yang akan dijalankan. Misalnya, Anda dapat mengaturnya untuk meluncurkan wizard.
Data Membuat file yang berisi data tertentu. Nilai REG_BINARY ini menentukan data file. Data diabaikan jika NullFile atau FileName ditentukan.
FileName Membuat file yang merupakan salinan file tertentu. Nilai REG_SZ ini menentukan jalur file yang sepenuhnya memenuhi syarat untuk disalin.
NullFile Membuat file kosong. NullFile tidak memiliki nilai yang ditetapkan. Jika NullFile ditentukan, nilai registri Data dan FileName diabaikan.

 

Contoh kunci registri dan cuplikan layar berikut mengilustrasikan submenu Baru untuk jenis file .myp-ms. Ini memiliki perintah, Aplikasi MyProgram.

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
      MyProgram.1
         ShellNew
         NullFile

Cuplikan layar menggambarkan submenu Baru . Saat pengguna memilih Aplikasi MyProgram dari submenu Baru , Shell membuat file bernama New MyProgram Application.myp-ms dan meneruskannya ke MyProgram.exe.

cuplikan layar penjelajah windows memperlihatkan perintah

Membuat Penangan Seret dan Letakkan

Prosedur dasar untuk mengimplementasikan handler seret dan letakkan sama dengan penangan menu pintasan konvensional. Namun, penangan menu pintasan biasanya hanya menggunakan penunjuk IDataObject yang diteruskan ke metode IShellExtInit::Initialize handler untuk mengekstrak nama objek. Handler seret dan letakkan dapat mengimplementasikan penangan data yang lebih canggih untuk mengubah perilaku objek yang diseret.

Saat pengguna mengklik kanan objek Shell untuk menyeret objek, menu pintasan ditampilkan saat pengguna mencoba menjatuhkan objek. Cuplikan layar berikut mengilustrasikan menu pintasan seret dan letakkan yang khas.

cuplikan layar menu pintasan seret dan letakkan

Penangan seret dan letakkan adalah penangan menu pintasan yang bisa menambahkan item ke menu pintasan ini. Handler seret dan letakkan biasanya terdaftar di bawah subkuntang berikut.

HKEY_CLASSES_ROOT
   Directory
      shellex
         DragDropHandlers

Tambahkan subkunci di bawah subkunci DragDropHandlers bernama untuk handler seret dan letakkan, dan atur nilai default subkunci ke bentuk string GUID pengidentifikasi kelas handler (CLSID). Contoh berikut mengaktifkan handler seret dan letakkan MyDD .

HKEY_CLASSES_ROOT
   Directory
      shellex
         DragDropHandlers
            MyDD
               (Default) = {MyDD CLSID GUID}

Menekan Kata Kerja dan Mengontrol Visibilitas

Anda dapat menggunakan pengaturan kebijakan Windows untuk mengontrol visibilitas kata kerja. Kata kerja dapat ditekan melalui pengaturan kebijakan dengan menambahkan nilai SuppressionPolicy , atau nilai GUID SuppressionPolicyEx ke subkunjung registri kata kerja. Tetapkan nilai subkunjung SuppressionPolicy ke ID kebijakan. Jika kebijakan diaktifkan, kata kerja dan entri menu pintasan terkait ditekan. Untuk kemungkinan nilai ID kebijakan, lihat enumerasi PEMBATASAN .

Menggunakan Model Pemilihan Kata Kerja

Nilai registri harus diatur untuk kata kerja untuk menangani situasi di mana pengguna dapat memilih satu item, beberapa item, atau pilihan dari item. Kata kerja memerlukan nilai registri terpisah untuk masing-masing dari tiga situasi ini yang didukung kata kerja. Nilai yang mungkin untuk model pemilihan kata kerja adalah sebagai berikut:

  • Tentukan nilai MultiSelectModel untuk semua kata kerja. Jika nilai MultiSelectModel tidak ditentukan, nilai tersebut disimpulkan dari jenis implementasi kata kerja yang telah Anda pilih. Untuk metode berbasis COM (seperti DropTarget dan ExecuteCommand) Player diasumsikan, dan untuk metode lain Dokumen diasumsikan.
  • Tentukan Tunggal untuk kata kerja yang hanya mendukung satu pilihan.
  • Tentukan Pemutar untuk kata kerja yang mendukung sejumlah item.
  • Tentukan Dokumen untuk kata kerja yang membuat jendela tingkat atas untuk setiap item. Melakukannya membatasi jumlah item yang diaktifkan dan membantu menghindari kehabisan sumber daya sistem jika pengguna membuka terlalu banyak jendela.

Ketika jumlah item yang dipilih tidak cocok dengan model pemilihan kata kerja atau lebih besar dari batas default yang diuraikan dalam tabel berikut, kata kerja gagal muncul.

Jenis implementasi kata kerja Dokumen Pemutar
Lama 15 item 100 item
COM 15 item Tanpa batasan

 

Berikut ini adalah contoh entri registri menggunakan nilai MultiSelectModel.

HKEY_CLASSES_ROOT
   Folder
      shell
         open
             = MultiSelectModel = Document
HKEY_CLASSES_ROOT
   ProgID
      shell
         verb
             = MultiSelectModel = Single | Document | Player

Menggunakan Atribut Item

Nilai bendera SFGAO dari atribut Shell untuk item dapat diuji untuk menentukan apakah kata kerja harus diaktifkan atau dinonaktifkan.

Untuk menggunakan fitur atribut ini, tambahkan nilai REG_DWORD berikut di bawah kata kerja:

  • Nilai AttributeMask menentukan nilai SFGAO dari nilai bit masker untuk diuji.
  • Nilai AttributeValue menentukan nilai SFGAO dari bit yang diuji.
  • ImpliedSelectionModel menentukan nol untuk kata kerja item, atau bukan nol untuk kata kerja pada menu pintasan latar belakang.

Dalam contoh entri registri berikut, AttributeMask diatur ke SFGAO_READONLY (0x40000).

HKEY_CLASSES_ROOT
   txtfile
      Shell
         test.verb2
            AttributeMask = 0x40000
            AttributeValue = 0x0
            ImpliedSelectionModel = 0x0
            command
               (Default) = %SystemRoot%\system32\notepad.exe %1

Menerapkan Kata Kerja Kustom untuk Folder melalui Desktop.ini

Di Windows 7 dan yang lebih baru, Anda dapat menambahkan kata kerja ke folder melalui Desktop.ini. Untuk informasi selengkapnya tentang file Desktop.ini, lihat Cara Menyesuaikan Folder dengan Desktop.ini.

Catatan

Desktop.ini file harus selalu ditandai Sistem + Tersembunyi sehingga tidak akan ditampilkan kepada pengguna.

 

Untuk menambahkan kata kerja kustom untuk folder melalui file Desktop.ini, lakukan langkah-langkah berikut:

  1. Buat folder yang ditandai Baca-saja atau Sistem.

  2. Buat file Desktop.ini yang menyertakan [. ShellClassInfo] DirectoryClass=Folder ProgID.

  3. Di registri, buat HKEY_CLASSES_ROOT\Folder ProgID dengan nilai CanUseForDirectory. Nilai CanUseForDirectory menghindari penyalahgunaan ProgID yang diatur untuk tidak berpartisipasi dalam menerapkan kata kerja kustom untuk folder melalui Desktop.ini.

  4. Tambahkan kata kerja di bawah subkunjud ProgID Folder, misalnya:

    HKEY_CLASSES_ROOT
       CustomFolderType
          Shell
             MyVerb
                command
                   (Default) = %SystemRoot%\system32\notepad.exe %1\desktop.ini
    

Catatan

Kata kerja ini dapat menjadi kata kerja default, dalam hal ini mengklik dua kali folder mengaktifkan kata kerja.

 

Praktik Terbaik untuk Penangan Menu Pintasan dan Beberapa Kata Kerja Pilihan

Memilih Kata Kerja Statis atau Dinamis untuk Menu Pintasan Anda

Menyesuaikan Menu Pintasan Menggunakan Kata Kerja Dinamis

Menu Pintasan (Konteks) dan Penangan Menu Pintasan

Kata Kerja dan Asosiasi File

Referensi Menu Pintasan