Dosya Tiplerinin Windows'a Kaydedilmesi

Dosya Tiplerinin Windows’a Kaydedilmesi Dosya Tiplerinin Windows"a KaydedilmesiWindows Uygulamalarında Kendi Dosya Tiplerimiz       Windows Forms uygulamalarında sık sık karşılaşabileceğimiz durumlardan biri de, kendi dosya formatlarımızdır. Program ayarları, veritabanı, text dosyalar, resimler, media dosyaları vb. bir cok içerik dosyasını programınızın birer çalışma ortamı, yada daha formal adı ile “dökümanı” olarak kullanabilirsiniz. Örneğin xls uzantılı dosyalar Excel dosyalarıdır, doc ve docx uzantılılar Word dosyalarıdır vb. Makalemiz bir dosya uzantısını windows’a nasıl register edebileceğinizi ve programatik olarak o dosya uzantısını nasıl denetleyebileceğinizi anlatmaktadır. Gereklilik        Office uygulamalarının avantajlarını inceleyelim, örneğin Word. “Word’ün veritabanı nedir?” Bir çoğunuz Word’ün de veritabanı mı olurmuş diyeceksiniz. Evet, yazdığımız yazılar ayrı ayrı doc uzantılı dosyalarda, gerekli formatta tutulmaktadır ve her doc dosyası aslında bir veritabanı’dır. Siz doc dosyasını alıp baska bir pc’e kopyaladığınızda aynı bilgilerinizi orada da görürsünüz.         Benzer bir dosya yapısını kendiniz için de oluşturduğunuzu düşünelim. Kendinize ait bir uzantı yarattınız. (makalemizde kvnc olarak geçmekte) bu kopyalanan bilgisayarda bulunan herhangi bir program tarafından açılabilecek mi? Ya da dosyanın ikonu bilinmeyen  şekilde mi olacak? Dosyaya çift tıklanınca ne olacak?Dosya Uzantısının Register EdilmesiBir dosya uzantısının register edilmesi, Windows’un Registery’sine yeni bir kaç maddenin eklenmesidir. Bu maddeler, dosyaların Windows Explorer’da nasıl görüntüleneceğini ve kullanıcı tarafından tıklandığında nasıl bir işlem yapılacağını belirler. İhtiyacimiz olan şeyler : Kendimize ait bir dosya uzantısı (varolanların üzerine yazmak pek doğru bir yaklaşım değildir). Dosya tipi için uniqe bir ad. Kullanıcıya gösterilecek olan dosya tipi adı. Windows Explorer’da dosya gösterilirken kullanılmak üzere bir ikon.              Dosya tipi yaratıldıktan sonra, windows üzerinden yapabileceğimiz işlemlerin dosya tipi ile eşleştirilmesi gerekmektedir. Bu işlemler dosyayı sağ tıkladığınızda görünen “Aç, Çalıştır, vb.” işlemlerdir. Bu işlemler için de : İşleme verilecek bir isim İşlem tıklandığı zaman sistemde çalıştırılacak bir shell command gerekmektedir. 

         Tüm bu işlemleri .NET üzerinden Registery de nasıl yapacağımızı inceleyelim. Registery İşlemleri Windows registerysine erişmek için kullanacağımız namespace, Microsoft.Win32. RegisteryKey classları ve erişim methodları Microsoft.Win32 namepace’i içinde bize sunulmuş durumda. Dosya tipleri, registery üzerinde HKEY_CLASSES_ROOT bölümü altındaki keylerde tutulmaktadır. Başlat / Çalıştır menusune regedit yazarak, registery editorunuzu açıp, bu yapıyı inceleyebilirsiniz.           Dosya uzantısı nokta (.) ile başlayan keyler halinde sisteme eklenmiş durumda bulunmaktadır.          Yapmamız gereken işlemlere bakalım,

Dosya uzantısı daha önce register edilmiş mi? Örneğimizde daha önceden register edilmiş bir uzantı varsa, üzerine yazmamayı tercih ediyoruz. RegistryKey rkRoot = Registry.ClassesRoot;      

RegistryKey rkFileType = rkRoot.OpenSubKey(".kvnc");

    if (rkFileType == null)

       {          //Daha önce register edilmiş bir değer yok, register edilebilir.

       }

O dosya uzantısında bir registery key yaratıyoruz ve unique olacak değerimizi set ediyoruz. Dosya tipi açıklaması için bir kayıt daha yaratarak, açıklamamızı ekliyoruz.

          RegistryKey rkNew;

          rkNew = rkRoot.CreateSubKey(".kvnc");

          rkNew.SetValue("", "kvnc.test");          RegistryKey rkInfo = rkRoot.CreateSubKey("kvnc.test");             

          rkInfo.SetValue("", "Veri Dosyasi");

Open, Run vb. işlemleri register etmek için "shell" key"i ve onun da altına gerekli işleme ait olan key"i yazıyoruz.

           RegistryKey rkShell = rkInfo.CreateSubKey("shell");

           RegistryKey rkOpen = rkShell.CreateSubKey("Open");

Open a tıklandığında, veya dosya çift tıklandığında yapılacak işlemi, çalıştırılacak olan exe yi belirleyelim ve nasıl parametre (command line argument) olarak geçebileceğimizi görelim.

           rkOpen.SetValue("", "&Open Document");

           rkNew = rkOpen.CreateSubKey("command");

           rkNew.SetValue("", @"C:windows otepad.exe %1");

Şu ana dek yaptığımız işlemler dosya uzantısının kaydedilmesi ve tıklandığında ilgili programın açılması için yeterli. Yapmamız gereken tek şey, uzantıya bir ikon atamak. Bunun içinde DefaultIcon adlı bir key daha yaratıyoruz

           rkNew = rkInfo.CreateSubKey("DefaultIcon");

           rkNew.SetValue("", @"C:windows otepad.exe,0");

Notepad.exe icinde embeded resource olarak gömülü bulunan 0. ikonu dosya uzantısıyla eşleştiriyoruz.

Oluşan kod tam olarak şu şekilde :

            RegistryKey rkRoot = Registry.ClassesRoot;      

            RegistryKey rkFileType = rkRoot.OpenSubKey(".kvnc");

            if (rkFileType == null)

            {

                RegistryKey rkNew;

                rkNew = rkRoot.CreateSubKey(".kvnc");

                rkNew.SetValue("", "kvnc.test");

                RegistryKey rkInfo = rkRoot.CreateSubKey("kvnc.test");             

                rkInfo.SetValue("", "Veri Dosyasi");

                RegistryKey rkShell = rkInfo.CreateSubKey("shell");

                RegistryKey rkOpen = rkShell.CreateSubKey("Open");

                rkOpen.SetValue("", "&Open Document");

                rkNew = rkOpen.CreateSubKey("command");

                rkNew.SetValue("", @"C:windows otepad.exe %1");

               

                //icon u almak için gerekli.!

                rkNew = rkInfo.CreateSubKey("DefaultIcon");

                rkNew.SetValue("", @"C:windows otepad.exe,0");

            }

Son soru ise bu kodu nerede çalıştıracağız?     Programların genel çalışmasını incelediğimizde, bu tarz dosya uzantılarının genelde install sırasında yapıldığını görmekteyiz. Tabi sizler ihtiyacınıza göre, programınız her açıldığında bu kontrolü yapabilir, kullanıcının isteğine bağlı yapmak isteyebilirsiniz. Örneğin winamp"taki mp3"lere dosyalarına ikon seçimi gibi.İnstall işlemi sırasında dosya uzantılarını register etmek için custom action yazmalısınız. Custom Action için bir örneğe buradan ulaşabilirsiniz.

Döküman Arama

Başlık :

Kapat