Aracılığıyla paylaş


Kabuk Uzantısı İşleyicilerini Kaydetme

Shell'in kullanılabilmesi için bir Shell uzantısı işleyici nesnesinin kaydedilmesi gereklidir. Bu konu, kabuk uzantısı işleyicisinin nasıl kaydedileceğine dair bir tartışmadır.

Kabuk uzantısı işleyicisini her oluşturduğunuzda veya değiştirdiğinizde, değişiklik yaptığınız konusunda sisteme bildirimde bulunmanız önemlidir. SHChangeNotifyçağırarak, SHCNE_ASSOCCHANGED olayını belirterek bunu yapın. SHChangeNotifyçağrısı yapmazsanız, sistem yeniden başlatılana kadar değişiklik tanınmayabilir.

Windows 2000 sistemleri için geçerli olan bazı ek faktörler vardır. Ayrıntılar için Windows 2000 Sistemlerinde Kabuk Uzantısı İşleyicilerini Kaydetme bölümüne bakın.

Tüm Bileşen Nesne Modeli (COM) nesnelerde olduğu gibi, windows yazılım geliştirme seti (SDK) ile sağlanan Guidgen.exegibi bir araç kullanarak işleyici için bir GUID oluşturmanız gerekir. HKEY_CLASSES_ROOT\CLSID altında, adı bu GUID'nin dize biçimi olan bir alt anahtar oluşturun. Kabuk uzantısı işleyicileri işlem içi sunucular olduğundan, bu GUID alt anahtarı altında bir InprocServer32 alt anahtarı oluşturmanız ve (Varsayılan) değerinin işleyicinin DLL'sinin yoluna ayarlanması gerekir. Apartman iş parçacığı modelini kullanın. Burada bir örnek gösterilmiştir:

HKEY_CLASSES_ROOT
   CLSID
      {00021500-0000-0000-C000-000000000046}
         InprocServer32
            (Default) = %windir%\System32\Example.dll
            ThreadingModel = Apartment

Shell, Kabuk uzantısı işleyicisi içerebilecek bir eylem gerçekleştirdiğinde, her zaman uygun kayıt defteri alt anahtarını denetler. Bir uzantı işleyicisinin kayıtlı olduğu alt anahtar, ne zaman çağrılacağını denetler. Örneğin, Kabuk, birdosya türü üyesi için bir kısayol menüsü görüntülediğinde, bir kısayol menüsü işleyicisinin kullanılması yaygın bir uygulamadır. Bu durumda, işleyicinin dosya türünün ProgID alt anahtarı altında kaydedilmesi gerekir.

Bu konuda aşağıdaki konular ele alınmaktadır:

İşleyici Adları

Kabuk uzantısı işleyicisini etkinleştirmek için, ProgID (dosya türleri için) veya Shell nesne türü adının (önceden tanımlanmış kabuk nesneleriiçin) altına, işleyici alt anahtarı adıyla (aşağıya bakın) bir alt anahtar oluşturun. Bu alt anahtarı ShellEx alt anahtarı altında oluşturmaya dikkat edin.

Örneğin, MyProgram.1 için bir kısayol menüsü uzantısı işleyicisi kaydetmek istiyorsanız, aşağıdaki alt anahtarı oluşturarak başlarsınız:

HKEY_CLASSES_ROOT
   MyProgram.1
      ShellEx
         ContextMenuHandlers

Aşağıdaki işleyiciler için, Shell uzantısının sınıf tanımlayıcısının (CLSID) dize sürümü olarak adlandırılan "İşleyici Alt Anahtarı adı" alt anahtarının altında bir alt anahtar oluşturun. Birden çok alt anahtar oluşturularak işleyici alt anahtarı adı altında birden çok uzantı kaydedilebilir.

İşlemci Arayüz İşleyici Alt Anahtarı Adı
Sütun sağlayıcısı işleyicisi IColumnProvider ColumnHandlers
Kısayol menüsü işleyicisi IContextMenu Bağlam Menüsü İşleyicileri
Copyhook işleyicisi ICopyHook CopyHookHandlers
Sürükle ve bırak işleyicisi IContextMenu DragDropHandlers
Özellik sayfası işleyicisi IShellPropSheetExt ÖzellikSayfasıYöneticileri

 

Aşağıdaki işleyiciler için, "İşleyici Alt Anahtarı Adı" anahtarının varsayılan değeri, Kabuk uzantısının CLSID'sinin dize sürümüdür. Bu işleyiciler için yalnızca bir uzantı kaydedilebilir.

İşlemci Arayüz İşleyici Alt Anahtarı Adı
Veri işleyicisi IDataObject DataHandler
Bırakma işleyicisi IDropTarget DropHandler
Simge işleyicisi IExtractIconA/W IconHandler
Küçük resim görüntü işleyicisi IThumbnailProvider {E357FCCD-A995-4576-B01F-234630154E96}
Bilgi ipucu işleyicisi IQueryInfo {00021500-0000-0000-C000-000000000046}
Kabuk bağlantısı (ANSI) IShellLinkA {000214EE-0000-0000-C000-000000000046}
Kabuk bağlantısı (UNICODE) IShellLinkW {000214F9-0000-0000-C000-000000000046}
Yapılandırılmış depolama IStorage {0000000B-0000-0000-C000-000000000046}
Meta veriler IPropertySetDepolama Özellik İşleyici
Başlat Menüsüne Sabitle IStartMenuPinnedList {a2a9545d-a0c2-42b4-9708-a0b2badd77c8}
Görev Çubuğuna Sabitle {90AA3A4E-1CBA-4233-B8BB-535773D48449}

 

Bir öğenin kısayol menüsüne Başlat Menüsüne Sabitle ve Görev Çubuğuna Sabitle eklemek için belirtilen alt anahtarlar, yalnızca IsShortCut girdisini içeren dosya türleri için gereklidir.

Önceden Tanımlanmış Kabuk Nesneleri

Kabuk, HKEY_CLASSES_ROOT altında dosya türleriyle aynı şekilde genişletilebilen ek nesneler tanımlar. Örneğin, tüm dosyalar için özellik sayfası işleyicisi eklemek için PropertySheetHandlers alt anahtarına kaydolabilirsiniz.

HKEY_CLASSES_ROOT
   *
      shellex
         PropertySheetHandlers

Aşağıdaki tablo, uzantı işleyicilerinin kaydedilebileceği çeşitli HKEY_CLASSES_ROOT alt anahtarlarını verir. Listelenen alt anahtarların tümü altında birçok uzantı işleyicisinin kaydedilemeyeceğini unutmayın. Diğer ayrıntılar için belirli işleyicinin belgelerine bakın.

Alt anahtar Açıklama Olası İşleyiciler
* Tüm dosyalar Kısayol Menüsü, Özellik Sayfası, Fiiller (aşağıya bakın)
TümDosyaSistemiNesneleri Tüm dosyalar ve dosya klasörleri Kısayol Menüsü, Özellik Sayfası, Fiiller
Klasör Tüm klasörler Kısayol Menüsü, Özellik Sayfası, Fiiller
Dizin Dosya klasörleri Kısayol Menüsü, Özellik Sayfası, Fiiller
Directory\Background Dosya klasörü arka planı Yalnızca Kısayol Menüsü
Masaüstü Arka Planı Masaüstü arka planı (Windows 7 ve üzeri) Kısayol Menüsü, Fiiller
Sürücü Bilgisayarım'daki "C:\" gibi tüm sürücüler Kısayol Menüsü, Özellik Sayfası, Fiiller
Tüm ağ (Ağ Yerlerim altında) Kısayol Menüsü, Özellik Sayfası, Fiiller
Network\Type\# # türüne ait tüm nesneler (aşağıya bakın) Kısayol Menüsü, Özellik Sayfası, Fiiller
NetShare Tüm ağ paylaşımları Kısayol Menüsü, Özellik Sayfası, Fiiller
NetServer Tüm ağ sunucuları Kısayol Menüsü, Özellik Sayfası, Fiiller
network_provider_name "network_provider_name" ağ sağlayıcısı tarafından sağlanan tüm nesneler Kısayol Menüsü, Özellik Sayfası, Fiiller
Yazıcılar Tüm yazıcılar Kısayol Menüsü, Özellik Sayfası
AudioCD CD sürücüsünde Ses CD'si Yalnızca fiiller
DVD DVD sürücüsü (Windows 2000) Kısayol Menüsü, Özellik Sayfası, Fiiller

 

Notlar

  • Dosya klasörü arka plan kısayol menüsüne, bir dosya klasörünün içinde sağ tıklayarak erişilir, ancak klasörün içeriklerinden herhangi birinin üzerine erişemezsiniz.
  • "Fiiller", HKEY_CLASSES_ROOT\Alt Anahtar\Kabuk\Fiilaltında kaydedilen özel komutlardır.
  • \Türü\#için , "#" ondalık olarak bir ağ sağlayıcısı türü kodudur. Ağ sağlayıcısı türü kodu, bir ağ türünün yüksek sözcüğüdür. Ağ türlerinin listesi Winnetwk.h üst bilgi dosyasında (WNNC_NET_* değerler) verilir. Örneğin, WNNC_NET_SHIVA 0x00330000 olduğundan ilgili tür alt anahtarı HKEY_CLASSES_ROOT\\Türü\51olacaktır.
  • "network_provider_name", WNetGetProviderNametarafından belirtilen bir ağ sağlayıcısı adıdır ve boşluklar alt çizgiye dönüştürülür. Örneğin, Microsoft Ağ ağ sağlayıcısı yüklüyse, sağlayıcı adı "Microsoft Windows Network" ve karşılık gelen network_provider_nameMicrosoft_Windows_Networkolur.

Uzantı İşleyicisinin Kayıt Örneği

Belirli bir işleyiciyi etkinleştirmek için, uzantı işleyici türü alt anahtarı altında işleyicinin adıyla bir alt anahtar oluşturun. Shell işleyicinin adını kullanmaz, ancak bu tür alt anahtar altındaki diğer tüm adlardan farklı olmalıdır. Ad alt anahtarının varsayılan değerini işleyicinin GUID'sinin dize biçimine ayarlayın.

Aşağıdaki örnekte, örnek bir .myp dosya türü kullanılarak kısayol menüsü ve özellik sayfası uzantısı işleyicilerini etkinleştiren kayıt defteri girdileri gösterilmektedir.

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}

Kabuk Uzantısı İşleyicilerini Başlatma