Kısayol Menüsü İşleyicileri Oluşturma

Bağlam menüsü işleyicileri veya verb işleyicileri olarak da bilinen kısayol menüsü işleyicileri, bir dosya türü işleyici türüdür. Bu işleyiciler, kendi işlemlerinde, gezginde veya diğer üçüncü taraf işlemlerinde yüklenmesine neden olacak şekilde uygulanabilir. İşlem içi işleyiciler oluştururken dikkatli olun çünkü bunları yükleyen işleme zarar verebilirler.

Not

32 bit uygulamalar bağlamında çalışan işleyicileri kaydederken Windows'un 64 bit tabanlı sürümleri için dikkat edilmesi gereken özel noktalar vardır: FARKLı bitlik bir uygulama bağlamında çağrıldığında, WOW64 alt sistemi dosya sistemi erişimini bazı yollara yönlendirir. .exe işleyiciniz bu yollardan birinde depolanıyorsa, bu bağlamda erişilemez. Bu nedenle, geçici bir çözüm olarak, ya .exe'yi yönlendirilmeyen bir yolda saklayın ya da gerçek sürümü başlatan bir geçici .exe sürümü saklayın.

Bu konu aşağıdaki gibi düzenlenmiştir:

Kurallı Fiiller

Uygulamalar genellikle tanımladıkları fiiller için yerelleştirilmiş görüntü dizeleri sağlamakla sorumludur. Ancak, dil bağımsızlığı derecesi sağlamak için sistem kurallı fiiller olarak adlandırılan standart bir grup yaygın kullanılan fiil tanımlar. Kurallı verb hiçbir zaman kullanıcıya görüntülenmez ve herhangi bir kullanıcı arabirimi diliyle kullanılabilir. Sistem, düzgün yerelleştirilmiş bir görüntü dizesini otomatik olarak oluşturmak için kurallı adı kullanır. Örneğin, open verb'ın görüntü dizesi bir İngilizce sistemde olarak, bir Almanca sistemde ise Almanca karşılığına ayarlanır.

Standart verb Açıklama
Open Dosya veya klasörü açar.
Opennew Dosya veya klasörü yeni bir pencerede açar.
Print Dosyayı yazdırır.
Printto Kullanıcının dosyayı yazıcı nesnesine sürükleyerek yazdırmasına izin verir.
Explore Klasör seçili durumdayken Windows Gezgini'ni açar.
Properties Nesnenin özellik sayfasını açar.

Not

Printtoverb da kurallıdır, ancak hiçbir zaman görüntülenmez. Ekleme, kullanıcının dosyayı yazıcı nesnesine sürükleyerek yazdırmasına olanak tanır.

Kısayol menüsü işleyicileri, GCS_VERBWveya GCS_VERBAile IContextMenu::GetCommandString aracılığıyla kendi kurallı fiillerini sağlayabilir. Sistem, ShellExecute'e geçirilen ikinci parametre (lpOperation) olarak kurallı fiilleri kullanır ve CMINVOKECOMMANDINFO.lpVerb üyesi IContextMenu::InvokeCommand yöntemine geçirildi.

Genişletilmiş Fiiller

Kullanıcı bir nesneye sağ tıkladığında, kısayol menüsünde varsayılan fiiller görüntülenir. Her kısayol menüsünde görüntülenmeyen bazı kısayol menülerine komut eklemek ve komutları desteklemek isteyebilirsiniz. Örneğin, yaygın olarak kullanılmayan veya deneyimli kullanıcılara yönelik komutlarınız olabilir. Bu nedenle, bir veya daha fazla genişletilmiş fiil de tanımlayabilirsiniz. Bu fiiller normal fiillere benzer, ancak kayıtlı oldukları şekilde normal fiillerden ayrılır. Genişletilmiş fiillere erişebilmek için kullanıcının SHIFT tuşuna basarken bir nesneye sağ tıklaması gerekir. Kullanıcı bunu yaptığı zaman, genişletilmiş fiiller varsayılan fiillere ek olarak görüntülenir.

Bir veya daha fazla genişletilmiş fiil tanımlamak için kayıt defterini kullanabilirsiniz. İlişkili komutlar yalnızca kullanıcı shift tuşuna basarken bir nesneye sağ tıkladığında görüntülenir. verb öğesini genişletilmiş olarak tanımlamak için, alt anahtarına "genişletilmiş" bir REG_SZ değeri ekleyin. Değerin kendisiyle ilişkilendirilmiş verisi olmamalıdır.

Yalnızca Programlı Erişim Fiilleri

Bu fiiller hiçbir zaman bağlam menüsünde görüntülenmez. Bunlara ShellExecuteEx kullanılarak ve pExecInfo parametresinin lpVerb alanı belirtilerek (SHELLEXECUTEINFO nesnesi) erişilebilir. Yalnızca verb'yu programlı erişim olarak tanımlamak için, verb'nin alt anahtarına bir "ProgrammaticAccessOnly" REG_SZ değeri ekleyin. Değerin kendisiyle ilişkilendirilmiş verisi olmamalıdır.

Bir veya daha fazla genişletilmiş fiil tanımlamak için kayıt defterini kullanabilirsiniz. İlişkili komutlar yalnızca kullanıcı shift tuşuna basarken bir nesneye sağ tıkladığında görüntülenir. Genişletilmiş olarak tanımlamak için verb'nin alt anahtara verb bir "genişletilmiş" REG_SZ değeri ekleyin. Değerin kendisiyle ilişkilendirilmiş verisi olmamalıdır.

Statik Fiiller Kullanarak Kısayol Menüsünü Özelleştirme

Kısayol Menünüzü Statik veya Dinamik Verb olarak seçtikten sonra, dosya türü için statik verb kaydederek dosya türünün kısayol menüsünü genişletebilirsiniz. Bunu yapmak için, dosya türüyle ilişkilendirilmiş uygulamanın ProgID'sinin alt anahtarının altına bir Shell alt anahtar ekleyin. İsteğe bağlı olarak, dosya türü için varsayılan verb'yi alt anahtarın varsayılan değeri olarak Shell yaparak tanımlayabilirsiniz.

Varsayılan verb , kısayol menüsünde ilk olarak görüntülenir. Amacı, belirtilen bir verb olmadığında, ShellExecuteEx işlevi çağrıldığında kullanabileceği bir verb sağlamaktırShell. Shell, ShellExecuteEx bu şekilde kullanıldığında varsayılanı verb seçmemelidir.

Shell, aşağıdaki sıralamaya göre mevcut ilk verb'i kullanır:

  1. Varsayılan verb
  2. Kayıt verb, eğer sipariş verb belirtilirse, kayıt defterinde ilk sırada olur.
  3. Open verb
  4. Open With verb

Listelenen fiillerden hiçbiri kullanılamıyorsa işlem başarısız olur.

Her verb için, Shell alt anahtarı altında bir alt anahtar oluşturun. Bu alt anahtarların her birinin REG_SZ değeri verb'nin görüntüleme dizesine (yerelleştirilmiş dize) ayarlanmalıdır. Her verb alt anahtar için, öğeleri etkinleştirmek için varsayılan değeri komut satırına ayarlanmış bir komut alt anahtarı oluşturun. "Open ve Print gibi kurallı fiiller için, sistem uygun bir şekilde yerelleştirilmiş dizeyi otomatik olarak görüntülediğinden, görüntü dizesini atlayabilirsiniz." Kural dışı fiiller için, görüntüleme dizesini atlarsanız, verb dize görüntülenir.

Aşağıdaki kayıt defteri örneğinde şunları unutmayın:

  • Doit kurallı olmadığından, D tuşuna verbbasılarak seçilebilen bir görünen ad atanır.
  • Yazdırverb kısayol menüsünde görünmez. Ancak kayıt defterine eklenmesi, kullanıcının dosyaları yazıcı simgesine bırakarak yazdırmasını sağlar.
  • Her verbbiri için bir alt anahtar gösterilir. %1 dosya adını temsil eder ve yazıcı adını %2.
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"

Aşağıdaki diyagramda, yukarıdaki kayıt defteri girişlerine uygun olarak kısayol menüsünün uzantısı gösterilmektedir. Bu kısayol menüsünde, Open, Do It ve Print fiilleri bulunur ve varsayılan olarak Do Itverb.

varsayılan verb yap kısayol menüsünün ekran görüntüsü

IDropTarget Arabirimini Kullanarak İşleyicinizi Etkinleştirme

Dinamik Veri Değişimi (DDE) kullanım dışıdır; bunun yerine IDropTarget kullanın. IDropTarget daha sağlamdır ve işleyicinin COM etkinleştirmesini kullandığından daha iyi etkinleştirme desteğine sahiptir. Birden çok öğe seçimi söz konusu olduğunda, IDropTarget hem DDE'de hem de createProcessbulunan arabellek boyutu kısıtlamalarına tabi değildir. Ayrıca, öğeler SHCreateShellItemArrayFromDataObject işlevi kullanılarak bir öğe dizisine dönüştürülebilen bir veri nesnesi olarak uygulamaya geçirilir. Bunu yapmak daha basittir ve öğe komut satırı veya DDE protokolleri için bir yola dönüştürüldüğünde olduğu gibi ad alanı bilgilerini kaybetmez.

IDropTarget ve dosya ilişkilendirme özniteliklerine yönelik Shell sorguları hakkında daha fazla bilgi için bkz. Algılanan Türler ve Uygulama Kaydı.

Statik Fiillerin Konumunu ve Sırasını Belirtme

Fiiller normalde nasıl numaralandırıldıklarına bağlı olarak bir kısayol menüsünde sıralanır; numaralandırması önce ilişkilendirme dizisinin sırasına ve ardından kayıt defterinin sıralama düzeniyle tanımlandığı şekilde ilişkilendirme dizisindeki öğelerin sırasına göre belirlenir.

Fiiller, ilişkilendirme girdisi için alt anahtarın Shell varsayılan değeri belirtilerek sıralanabilir. Bu varsayılan değer, kısayol menüsünün en üst konumunda görüntülenecek tek bir öğeyi veya boşluk veya virgülle ayrılmış öğelerin listesini içerebilir. İkinci durumda listedeki ilk öğe varsayılan öğedir ve diğer fiiller hemen altında belirtilen sırada görüntülenir.

Örneğin, aşağıdaki kayıt defteri girdisi aşağıdaki sırayla kısayol menüsü fiilleri oluşturur:

  1. Göstermek
  2. Aletler
  3. Kişiselleştirme
HKEY_CLASSES_ROOT
   DesktopBackground
      Shell
         Display
         Gadgets
         Personalization

Benzer şekilde, aşağıdaki kayıt defteri girdisi aşağıdaki sırayla kısayol menüsü fiilleri oluşturur:

  1. Kişiselleştirme
  2. Aletler
  3. Göstermek
HKEY_CLASSES_ROOT
   DesktopBackground
      Shell = "Personalization,Gadgets"
      Display

Fiilleri Menünün Üstüne veya Altına Konumlandırma

Aşağıdaki kayıt defteri özniteliği, menünün üstüne veya altına bir verb yerleştirmek için kullanılabilir. Bu özniteliği belirten birden çok fiil varsa, bunu yapacak son fiil öncelik alır:

Position=Top | Bottom 

Statik Basamaklı Menüler Oluşturma

Windows 7 ve sonraki sürümlerde, kayıt defteri ayarları aracılığıyla basamaklı menü uygulaması desteklenir. Windows 7'nin öncesinde, basamaklı menülerin oluşturulması yalnızca IContextMenu arabiriminin uygulanmasıyla mümkündü. Windows 7 ve sonraki sürümlerde, yalnızca statik yöntemler yetersiz olduğunda COM kod tabanlı çözümlere başvurmanız gerekir.

Aşağıdaki ekran görüntüsünde basamaklı menü örneği verilmiştir.

Basamaklı menüscreen shot showing an example of a cascading menuscreen shot showing an example of a cascading menuörneğini gösterenekran görüntüsü

Windows 7 ve sonraki sürümlerde basamaklı menüler oluşturmanın üç yolu vardır:

Alt Komut Kayıt Defteri Girdisi ile Basamaklı Menüler Oluşturma

Windows 7 ve sonraki sürümlerde, aşağıdaki yordamı kullanarak basamaklı menüler oluşturmak için Alt Komutlar girdisini kullanabilirsiniz.

SubCommands girdisini kullanarak basamaklı menü oluşturmak için

  1. Basamaklı menünüzü göstermek için HKEY_CLASSES_ROOT\ProgID\shell altında bir alt anahtar oluşturun. Bu örnekte, bu alt anahtara CascadeTest adını vereceğiz. CascadeTest alt anahtarının varsayılan değerinin boş olduğundan ve (değer ayarlanmadı) olarak gösterildiğinden emin olun.

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest
                (Default)
    
  2. CascadeTest alt anahtarınıza REG_SZ türünde bir MUIVerb girdisi ekleyin ve kısayol menüsünde adı olarak görünecek metni atayın. Bu örnekte, "Test Art Arda Menüsü" ismini veriyoruz.

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest
                (Default)
                MUIVerb = Test Cascade Menu
    
  3. CascadeTest alt anahtarınıza, menüde görünmesi gereken fiillerin listesi, görünüm sırasına göre noktalı virgülle ayrılmış olarak, atanan REG_SZ türünde bir SubCommands girdisi ekleyin. Örneğin, burada sistem tarafından sağlanan birkaç fiil atarız:

    HKEY_CLASSES_ROOT
       *
          Shell
             CascadeTest
                SubCommands
                Windows.delete;Windows.properties;Windows.rename;Windows.cut;Windows.copy;Windows.paste
    
  4. Özel fiiller söz konusu olduğunda, bunları statik verb uygulama yöntemlerinden herhangi birini kullanarak uygulayın ve bu örnekte kurgusal verb bir FiilAdı için gösterildiği gibi CommandStore alt anahtarı altında listeleyin:

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

Not

Bu yöntem, özel fiillerin bir kez kaydedilip adı SubCommands girdisi verb altında listelenerek yeniden kullanılması avantajına sahiptir. Ancak, uygulamanın HKEY_LOCAL_MACHINEaltında kayıt defterini değiştirme iznine sahip olmasını gerektirir.

 

ExtendedSubCommandsKey Kayıt Defteri Girdisi ile Basamaklı Menüler Oluşturma

Windows 7 ve sonraki sürümlerde, genişletilmiş basamaklı menüler oluşturmak için ExtendedSubCommandKey girişini kullanabilirsiniz: basamaklı menüler içinde basamaklı menüler.

Aşağıdaki ekran görüntüsü, genişletilmiş basamaklı menü örneğidir.

Cihazlarscreen shot showing extended cascading menu for devicesscreen shot showing extended cascading menu for devicesiçin genişletilmiş basamaklı menüyü gösterenekran görüntüsü

HKEY_CLASSES_ROOT, HKEY_CURRENT_USER ve HKEY_LOCAL_MACHINEbirleşimi olduğundan, HKEY_CURRENT_USER\Yazılım\Sınıfları alt anahtarı altında herhangi bir özel fiil kaydedebilirsiniz. Bunu yapmanın temel avantajı, yükseltilmiş iznin gerekli olmamasıdır. Ayrıca, diğer dosya ilişkilendirmeleri aynı ExtendedSubCommandsKey alt anahtarını belirterek bu fiil kümesinin tamamını yeniden kullanabilir. Bu fiil kümesini yeniden kullanmanız gerekmiyorsa, üst öğe altındaki fiilleri listeleyebilir, ancak üst öğesinin Varsayılan değerinin boş olduğundan emin olabilirsiniz.

ExtendedSubCommandsKey girdisini kullanarak basamaklı bir menü oluşturma

  1. Basamaklı menünüzü göstermek için HKEY_CLASSES_ROOT\ProgID\shell altında bir alt anahtar oluşturun. Bu örnekte, bu alt anahtara cascadeTest2 adını vereceğiz. CascadeTest alt anahtarının varsayılan değerinin boş olduğundan ve (değer ayarlanmadı) olarak gösterildiğinden emin olun.

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest2
                (Default)
    
  2. CascadeTest alt anahtarınıza REG_SZ türünde bir MUIVerb girdisi ekleyin ve kısayol menüsünde adı olarak görünecek metni atayın. Bu örnekte, "Test Art Arda Menüsü" ismini veriyoruz.

    HKEY_CLASSES_ROOT
       *
          shell
             CascadeTest
                (Default)
                MUIVerb = Test Cascade Menu 2
    
  3. Oluşturduğunuz CascadeTest alt anahtarının altına bir ExtendedSubCommandsKey alt anahtarı ekleyin ve sonra belge alt komutlarını ekleyin (REG_SZ türünde); mesela:

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

    Test Cascade Menüsü 2 alt anahtarının varsayılan değerinin boş olduğundan ve (değer ayarlanmadı) olarak gösterildiğinden emin olun.

  4. Aşağıdaki statik verb uygulamalardan herhangi birini kullanarak alt fiilleri doldurun. CommandFlags alt anahtarının EXPCMDFLAGS değerlerini temsil ettiğini unutmayın. Art arda menü öğesinden önce veya sonra ayırıcı eklemek istiyorsanız, ECF_SEPARATORBEFORE (0x20) veya ECF_SEPARATORAFTER (0x40) kullanın. Bu Windows 7 ve üzeri bayrakların açıklaması için bkz. IExplorerCommand::GetFlags. ECF_SEPARATORBEFORE yalnızca en üst düzey menü öğeleri için çalışır. MUIVerb REG_SZtüründe, CommandFlags ise REG_DWORDtüründedir.

    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
    

Aşağıdaki ekran görüntüsü, önceki kayıt defteri anahtarı giriş örneklerinin bir çizimidir.

Not defteri ve wordpadscreen shot showing an example of a cascading menu showing choices of notepad and wordpadscreen shot showing an example of a cascading menu showing choices of notepad and wordpadseçeneklerini gösteren basamaklı menü örneğini gösterenekran görüntüsü

IExplorerCommand Arabirimi ile Basamaklı Menüler Oluşturma

Basamaklı bir menüye fiil eklemek için bir diğer seçenek de IExplorerCommand::EnumSubCommands. Bu yöntem, komut modülü komutlarını IExplorerCommandProvider aracılığıyla sağlayan veri kaynaklarının bu komutları bir kısayol menüsünde fiil olarak kullanmasını sağlar. Windows 7 ve sonraki sürümlerde, IExplorerCommand kullanarak aynı uygulamayı IContextMenu ile sağlayabileceğiniz gibi sağlayabilirsinizverb.

Aşağıdaki iki ekran görüntüsü, Cihazlar klasöründeki basamaklı menülerin kullanımını göstermektedir.

Cihazlar klasöründeki basamaklı menü örneğini gösteren ekran görüntüsü.

Aşağıdaki ekran görüntüsünde, Cihazlar klasöründeki basamaklı bir menünün başka bir uygulaması gösterilmektedir.

cihazlar klasöründe basamaklı menü örneğini gösteren ekran görüntüsü

Not

IExplorerCommand yalnızca işlem içi etkinleştirmeyi desteklediğinden, uygulamayı komutlar ve kısayol menüleri arasında paylaşması gereken veri kaynakları tarafından Shell kullanılması önerilir.

 

Gelişmiş Sorgu Söz Dizimi Kullanarak Statik Fiiller için Dinamik Davranış Alma

Gelişmiş Sorgu Söz Dizimi (AQS), örneği oluşturulmakta olan öğenin verb özellikleri kullanılarak değerlendirilecek bir koşulu ifade edebilir. Bu sistem yalnızca hızlı özelliklerle çalışır. Bunlar, veri kaynağının IShellFolder2::GetDefaultColumnState metodundan SHCOLSTATE_SLOW döndürmeyerek 'hızlı' olarak rapor ettiği özelliklerdir.

Windows 7 ve üzeri, yerelleştirilmiş derlemelerde sorunlardan kaçınan kurallı değerleri destekler. Bu Windows 7 geliştirmesinin avantajlarından yararlanmak için yerelleştirilmiş derlemelerde aşağıdaki kurallı söz dizimi gereklidir.

System.StructuredQueryType.Boolean#True

Aşağıdaki örnek kayıt defteri girdisinde:

  • AppliesTo değeri, verb öğesinin görüntülenip görüntülenmediğini kontrol eder.
  • DefaultAppliesTo değeri, varsayılan olan verb değeri denetler.
  • HasLUAShield değeri, Kullanıcı Hesabı Denetimi (UAC) kalkanının görüntülenip görüntülenmeyeceğini denetler.

Bu örnekte DefaultAppliesTo değeri, bunu verb dosya adında "exampleText1" sözcüğü bulunan tüm dosyalar için varsayılan yapar. AppliesTo değeri, adında "exampleText1" olan tüm dosyalar için verb öğesini etkinleştirir. HasLUAShield değeri, adında "exampleText2" olan dosyaların kalkanını görüntüler.

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

Command alt anahtarını ve bir değer ekleyin:

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

Windows 7 kayıt defterinde, aşağıdaki yaklaşımı kullanan bitlocker fiillerine örnek olarak HKEY_CLASSES_ROOT\sürücü bakın:

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

AQS hakkında daha fazla bilgi için bkz. gelişmiş sorgu söz dizimi .

Kullanım Dışı: Fiilleri Dinamik Veri Değişimi Komutlarıyla İlişkilendirme

DDE kullanım dışı bırakıldı; bunun yerine IDropTarget kullanın. DDE, DDE sunucusunu bulmak için bir yayın penceresi iletisine bağlı olduğundan kullanım dışıdır. DDE sunucusu donduğunda, yayın penceresi iletisi durur ve bu yüzden diğer uygulamalar için DDE konuşmaları da durur. Tek bir sıkışan uygulamanın, kullanıcının genel deneyiminde sonraki donmalara yol açması yaygındır.

IDropTarget yöntemi daha sağlamdır ve işleyicinin COM etkinleştirmesini kullandığından daha iyi etkinleştirme desteğine sahiptir. Birden çok öğe seçimi söz konusu olduğunda, IDropTarget hem DDE'de hem de createProcessbulunan arabellek boyutu kısıtlamalarına tabi değildir. Ayrıca, öğeler SHCreateShellItemArrayFromDataObject işlevi kullanılarak bir öğe dizisine dönüştürülebilen bir veri nesnesi olarak uygulamaya geçirilir. Bunu yapmak daha basittir ve öğe komut satırı veya DDE protokolleri için bir yola dönüştürüldüğünde olduğu gibi ad alanı bilgilerini kaybetmez.

IDropTarget ve dosya ilişkilendirme özniteliklerine yönelik Shell sorguları hakkında daha fazla bilgi için bkz. Algılanan Türler ve Uygulama Kaydı.

Uygulama Görevlerini Tamamlama Verb

Fiilleri uygulamak için aşağıdaki görevler hem statik hem de dinamik verb uygulamalarla ilgilidir. Dinamik fiiller hakkında daha fazla bilgi için bkz. Dinamik Fiiller Kullanarak Kısayol Menüsünü Özelleştirme.

Önceden Tanımlanmış Shell Nesneler için Kısayol Menüsünü Özelleştirme

Önceden tanımlanmış Shell birçok nesnenin özelleştirilebilen kısayol menüleri vardır. Komutu tipik dosya türlerini kaydettiğiniz gibi kaydedin, ancak önceden tanımlanmış nesnenin adını dosya türü adı olarak kullanın.

Önceden tanımlanmış nesnelerin listesi, Uzantı İşleyicileri Oluşturma'nın ShellÖnceden Tanımlanmış Shell Nesneler bölümündedir. Kısayol menüleri kayıt defterine fiiller eklenerek özelleştirilebilen önceden tanımlanmış Shell nesneler tabloda sözcüğüyle Verbişaretlenir.

Yeni Bir Alt Menüyü Genişletme

Kullanıcı Windows Gezgini'nde Dosya menüsünü açtığında, görüntülenen komutlardan biri Yeni. Bu komut seçildiğinde bir alt menü görüntülenir. Varsayılan olarak, alt menü Klasör ve Kısayololmak üzere kullanıcıların alt klasörler ve kısayollar oluşturmasına olanak tanıyan iki komut içerir. Bu alt menü, herhangi bir dosya türü için dosya oluşturma komutlarını içerecek şekilde genişletilebilir.

Yeni Alt Menüsüne dosya oluşturma komutu eklemek için, uygulamanızın dosyaları ilişkili bir dosya türüne sahip olmalıdır. Dosya adının altına bir ShellNew alt anahtarı ekleyin. Dosya menüsünün Yeni komutu seçildiğinde, Shell dosya türü Yeni alt menüsüne eklenir. Komutun görüntüleme dizesi, programın ProgID'sine atanan açıklayıcı dizedir.

Dosya oluşturma yöntemini belirtmek için, ShellNew alt anahtarına bir veya daha fazla veri değeri atayın. Kullanılabilir değerler aşağıdaki tabloda listelenmiştir.

ShellNew alt anahtar değeri Açıklama
Komut Bir uygulamayı yürütür. Bu REG_SZ değeri yürütülecek uygulamanın yolunu belirtir. Örneğin, bunu bir sihirbazı başlatacak şekilde ayarlayabilirsiniz.
Veri Belirtilen verileri içeren bir dosya oluşturur. Bu REG_BINARY değeri dosyanın verilerini belirtir. Data, NullFile veya FileName belirtilmişse yoksayılır.
Dosyaadı Belirtilen dosyanın kopyası olan bir dosya oluşturur. Bu REG_SZ değeri, kopyalanacak dosyanın tam yolunu belirtir.
NullDosya Boş bir dosya oluşturur. NullFile atanmış bir değer yok. NullDosya belirtilirse, Veri ve DosyaAdı kayıt defteri değerleri yoksayılır.

 

Aşağıdaki kayıt defteri anahtarı örneği ve ekran görüntüsü, .myp-ms dosya türü için Yeni alt menüsü gösterir. MyProgram Application bir komutu vardır.

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

Ekran görüntüsünde Yeni alt menüsü gösterilir. Kullanıcı Yeni alt menüsünden MyProgram Uygulaması'nı seçtiğindeShell, Yeni MyProgram Application.myp-ms adlı bir dosya oluşturur ve MyProgram.exeiletir.

"Yeni" alt menüsünde yeni bir "myprogram uygulaması" komutunu gösteren Windows Gezgini'nin ekran görüntüsü

Sürükle ve Bırak İşleyicileri Oluşturma

Sürükle ve bırak işleyicisi uygulamak için temel yordam, geleneksel kısayol menü işleyicileriyle aynıdır. Ancak, kısayol menüsü işleyicileri normalde nesnenin adını ayıklamak için yalnızca işleyicinin IShellExtInit::Initialize yöntemine geçirilen IDataObject işaretçisini kullanır. Sürükle ve bırak işleyicisi, sürüklenen nesnenin davranışını değiştirmek için daha karmaşık bir veri işleyicisi uygulayabilir.

Bir kullanıcı nesneyi sürüklemek için bir Shell nesneye sağ tıkladığında, kullanıcı nesneyi bırakmaya çalıştığında bir kısayol menüsü görüntülenir. Aşağıdaki ekran görüntüsünde tipik bir sürükle ve bırak kısayol menüsü gösterilmektedir.

Sürükle ve bırak kısayol menüsünün ekran görüntüsünü

Sürükle ve bırak işleyicisi, bu kısayol menüsüne öğe ekleyebilen bir kısayol menüsü işleyicisidir. Sürükle ve bırak işleyicileri genellikle aşağıdaki alt anahtara kaydedilir.

HKEY_CLASSES_ROOT
   Directory
      shellex
         DragDropHandlers

alt anahtarının altındaki DragDropHandlers alt anahtarı için, sürükle ve bırak işleyicisi adında bir alt anahtar ekleyin ve bu alt anahtarın varsayılan değerini işleyicinin sınıf tanımlayıcısı (CLSID) GUID'sinin dize biçimine ayarlayın. Aşağıdaki örnek, MyDD sürükle ve bırak işleyicisini etkinleştirir.

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

Fiilleri Gizleme ve Görünürlüğü Denetleme

Görünürlüğü denetlemek verb için Windows ilke ayarlarını kullanabilirsiniz. Fiiller, politika ayarları yoluyla 'nin kayıt defteri alt anahtarına SuppressionPolicy değeri veya SuppressionPolicyEx GUID değeri eklenerek gizlenebilir verb. SuppressionPolicy alt anahtarının değerini ilke kimliğine ayarlayın. Politika etkinleştirilirse, verb ve ilişkili kısayol menüsü girişi bastırılır. Olası ilke kimliği değerleri için bkz. KISITLAMALAR numaralandırması.

Seçim Modelini Kullanma Verb

Bir kullanıcının tek bir öğeyi, birden çok öğeyi veya bir öğeden seçim seçebildiği durumları işlemek için fiiller için kayıt defteri değerleri ayarlanmalıdır. A verb , tarafından desteklenen bu üç durumun verb her biri için ayrı kayıt defteri değerleri gerektirir. Seçim modeli için verb olası değerler aşağıdaki gibidir:

  • Tüm fiiller için MultiSelectModel değerini belirtin. MultiSelectModel değeri belirtilmezse, seçtiğiniz uygulama türünden verb çıkarılır. COM tabanlı yöntemler için (DropTarget ve ExecuteCommand gibi) Player varsayılır ve diğer yöntemler için Belge varsayılır.
  • Yalnızca tek bir seçimi destekleyen fiiller için Tek belirtin.
  • Fiillerin herhangi bir sayıda öğeyi desteklemesi durumunda, Player belirtin.
  • Her öğe için en üst düzey pencere oluşturan fiiller için Belge belirtin. Bunun yapılması, etkinleştirilen öğe sayısını sınırlar ve kullanıcı çok fazla pencere açtığında sistem kaynaklarının tükenmesini önlemeye yardımcı olur.

Seçilen öğe sayısı seçim modeliyle verb eşleşmiyorsa veya aşağıdaki tabloda belirtilen varsayılan sınırlardan büyükse, verb öğesi görünmez.

Uygulama türü verb Belge Oyuncu
Miras 15 öğe 100 öğe
COM 15 öğe Sınır yok

 

Aşağıda MultiSelectModel değerini kullanan örnek kayıt defteri girdileri verilmiştir.

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

Öğe Özniteliklerini Kullanma

Bir öğenin SFGAO bayrak değerleri, bu öğenin Shell etkinleştirilip etkinleştirilmeyeceğini veya devre dışı bırakılıp bırakılmayacağını belirlemek için test edilebilir.

Bu öznitelik özelliğini kullanmak için aşağıdaki REG_DWORD değerlerini öğesinin verbaltına ekleyin:

  • AttributeMask değeri, test etmek için maskenin bit değerlerinin SFGAO değerini belirtir.
  • AttributeValue değeri, test edilen bitlerin SFGAO değerini belirtir.
  • ImpliedSelectionModel öğe fiilleri için sıfır veya arka plan kısayol menüsündeki fiiller için sıfır olmayan değerleri belirtir.

Aşağıdaki örnek kayıt defteri girdisinde, AttributeMask SFGAO_READONLY (0x40000) olarak ayarlanmıştır.

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

Desktop.ini aracılığıyla Klasörler için Özel Fiillerin Kullanılması

Windows 7 ve sonraki sürümlerde, Desktop.iniaracılığıyla bir klasöre fiil ekleyebilirsiniz. Desktop.ini dosyaları hakkında daha fazla bilgi için bkz. Desktop.iniile Klasörleri Özelleştirme.

Not

Desktop.ini dosyalar her zaman Sistem + işaretlenmelidir, böylece kullanıcılara gösterilmez.

 

Desktop.ini dosyası aracılığıyla klasörler için özel fiiller eklemek için aşağıdaki adımları uygulayın:

  1. Salt okunur veya Sistem olarak işaretlenmiş bir klasör oluşturun.

  2. Bir [.ShellClassInfo] DirectoryClass=Folder ProgID içeren bir Desktop.ini dosyası oluşturun.

  3. Kayıt defterinde CanUseForDirectory değeriyle HKEY_CLASSES_ROOT\Klasör ProgID oluşturun. CanUseForDirectory değeri, Desktop.iniaracılığıyla klasörler için özel fiillerin uygulanmasına katılmamak üzere ayarlanmış ProgID'lerin kötüye kullanılmasını önler.

  4. KlasörüProgID alt anahtarının altına fiiller ekleyin, örneğin:

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

Not

Bu fiiller varsayılan verb olabilir ve bu durumda klasöre çift tıklamak verb öğesini etkinleştirir.

 

Kısayol Menüsü İşleyicileri ve Çoklu Seçim Eylemleri için En İyi Yöntemler

Kısayol Menünüzü Statik veya Dinamik Verb Olarak Seçme

Dinamik Fiiller Kullanarak Kısayol Menüsünü Özelleştirme

Kısayol (Bağlam) Menüleri ve Kısayol Menüsü İşleyicileri

Fiiller ve Dosya İlişkilendirmeleri

Kısayol Menüsü Referansı