1. Reklam


    1. joysro
      ledas
      jungler
      keasro
      zeus
      karantina

>>> C# İle Kendi Dosya Uzantınızı Oluşturun <<<


  1. HastaInsan

    HastaInsan Aileden rank8

    Kayıt:
    19 Haziran 2007
    Mesajlar:
    7.766
    Beğenilen Mesajlar:
    0
    Ödül Puanları:
    0
    [​IMG]

    >>> C# İle Kendi Dosya Uzantınızı Oluşturun <<<

    Hepinizin bildiği gibi her uygulamanın kendisine özel dosya türleri vardır, notepad text dosyaları ile çalışır, flash .fla uzantılı dosyalarla çalışır vb, kendi yazdığınız programında kendine özel bir dosya türü olmasını, bu tip dosyaların windows tarafından her zaman sizin uygulamanız ile açılmasını istiyorsanız windows' un kayıt defteri Registry ile haşır neşir olmanız gerekiyor.

    C sharp registry işlemleri yapabilmemiz için bize Microsoft.Win32 namespace ini sunmaktadır.


    Registry ve RegistryKey sınıfları

    Microsoft.Win32 namespace' i içerisinde bulunan Registry ve RegistryKey classları bize kayıt defteri üzerinde istediğimiz işlemleri yapmayı sağlamaktadır.

    Registry sınıfı, registry içerisindeki anahtarlara erişebilmemiz için bize aşağıdaki özellikleri sunar;

    * Registry.ClassesRoot; (HKEY_CLASSES_ROOT)
    * Registry.CurrentConfig; (HKEY_CURRENT_CONFIG)
    * Registry.CurrentUser; (HKEY_CURRENT_USER)
    * Registry.DynData; (HKEY_DYN_DATA)
    * Registry.LocalMachine; (HKEY_LOCAL_MACHINE)
    * Registry.PerformanceData; (HKEY_PERFORMANCE_DATA)
    * Registry.Users; (HKEY_USERS)

    Bu özellikler, RegistryClass cinsinden birer nesne döndürürler, bu nesne ise her metodun ilişkili olduğu registry anahtarına referans içerir.

    RegistryKey sınıfının en çok kullanılan metodları ve yaptıkları işler ise şöyledir;

    * RegistryKey.CreateSubKey(string subkey) parametre olarak girilen anahtarı (eğer varsa) nesne olarak döndürür, yoksa oluşturur.
    * RegistryKey.DeleteSubKey(string subkey) parametre olarak girilen registry anahtarını siler.
    * RegistryKey.GetSubKeyNames() açık olan anahtarın bütün alt anahtarlarını bir string dizisi içerisinde geri döndürür.
    * RegistryKey.OpenSubKey(string name) parametre olarak girilen anahtarı (eğer varsa) nesne olarak döndürür. Yoksa hata verecektir. try .. catch ile kullanılması salık verilir.
    * RegistryKey.GetValue(string name) açık olan anahtarın içerisinde "name" parametresinde belirtilen dize değerini object türünden bir nesne olarak geri döndürür.
    * RegistryKey.GetValueNames() açık olan anahtarın barındırdığı tüm dize değerlerini string dizisi içerisinde geri döndürür.
    * RegistryKey.SetValue(string name, object value) açık olan anahtar içerisine string parametresinde belirtilen isimde ve value parametresinde girilen değeri taşıyan yeni bir dize değeri oluşturur.

    Şimdilik işimize yarayacak olanlar bunlar, tabi RegistryKey sınıfı içerisindeki diğer metod ve özellikleri de yeri geldikçe açıklayacağım.


    Örnek Uygulama !..

    Sınıf yapılarını da tanıdığımıza göre, artık uygulamaya geçebiliriz.

    Visual Studio içerisinde yeni bir Console Application projesi başlatıyoruz isim olarak RegistryApp verebilirsiniz.

    Uygulamanın kodları:


    Kod:
    //bizim programimizin iliskilendirilecegi dosya uzantisi
    const string className = ".abc";
    const string regIdentifier = "myOwnExt";
    static string applicationPath = Environment.CommandLine;
    static string iconPath = "";
    
    [STAThread]
    static void Main(string[] args)
    {
    //istedigimiz iconu alabilmek icin komut satiri degiskeninden //tirnaklari kaldirmali ve virgulden sonra icon indexini vermeliyiz ;)
    iconPath = applicationPath.Substring(0,applicationPath.LastIndexOf("\"")) + ", 0\"";
    iconPath = iconPath.Replace("\"","");
    CreateRegistryValue(); //registry duzenlemelerini yapalim..
    
    if(args.Length > 0)
    {
    printArgs(args);
    }
    
    Console.ReadLine();
    
    }
    
    static void printArgs(string[] argList)
    {
    foreach(string arg in argList)
    {
    Console.WriteLine("{0}",arg);
    }
    }
    
    static void CreateRegistryValue()
    {
    //HKEY_CLASSES_ROOT' u aciyoruz
    RegistryKey regKey = Registry.ClassesRoot;
    RegistryKey subKey;
    
    //eger daha onceden yapilandirilmamis ise yapilandiriyoruz
    if(!isExists(regKey,className))
    {
    subKey = regKey.CreateSubKey(className);
    subKey.SetValue("",regIdentifier); //varsayilan dize degerini belirliyoruz
    subKey.Close(); //actigimiz keyi kapatalim
    
    //eger uzantimizin tanimlayici anahtari da yaratilmadi ise bu asamada yaratabiliriz
    if(!isExists(regKey,regIdentifier))
    {
    subKey = regKey.CreateSubKey(regIdentifier);
    //dosyamizin bilgilerinde gorunecek turunu yaziyoruz
    subKey.SetValue("","Kendi dosya türümüz");
    
    //varsayilan iconu seciyoruz
    RegistryKey defaultIco = subKey.CreateSubKey("DefaultIcon");
    defaultIco.SetValue("",iconPath);
    defaultIco.Close();
    
    //shell anahtarini belirliyoruz
    RegistryKey shellKey = subKey.CreateSubKey("shell");
    shellKey.SetValue("","open");
    
    //shell keyi altina, open keyini tanimliyoruz
    RegistryKey shellOpen = shellKey.CreateSubKey("open");
    shellOpen.SetValue("","Ke&ndi uygulamam ile aç");
    
    //son olarak open keyi altina, command keyini aciyoruz.
    RegistryKey openCommand = shellOpen.CreateSubKey("command");
    openCommand.SetValue("",applicationPath+" %1");
    
    //sirayla actigimiz tum keyleri kapatiyoruz.
    openCommand.Close();
    shellOpen.Close();
    shellKey.Close();
    subKey.Close();
    }
    }
    else
    {
    Console.WriteLine("Dosya uzantisi zaten iliskilendirilmis");
    }
    }
    
    static bool isExists(RegistryKey key,string checkValue)
    {
    //aranilan keyin olup olmadigini denetliyoruz
    if(key.OpenSubKey(checkValue) != null)
    {
    return true;
    }
    else
    {
    key.Close(); //kapatalim ki hataya sebep olmasin
    return false;
    }
    }
    Kodları tamamladıysak gelelim çalışma mantığına, uygulamamız her çalıştığında CreateRegistryValue metodunu çağırıyor, bu metod ise kabaca programımızın kayıt edeceği dosya uzantısının daha önce yaratılmış olup olmadığına bakıyor, eğer yoksa tüm düzenlemeleri ile yaratıp bizim için kullanıma hazır hale getiriyor.

    Uygulamanın Denenmesi

    Evet, uygulamayı tamamladığımıza göre şimdi geldik deneme safhasına.

    Uygulamamızın doğru çalışıp çalışmadığını denemek için pek tabi ilk önce kendi dosyamızı oluşturmamız lazım. Bunun için açıyoruz notepad' i ve (boş olabilir önemli değil) rastgele birşeyler karalayıp "save as" (farklı kaydet) diyoruz. Aşağıdaki şekilde dosyamızı kaydediyoruz.


    [​IMG]

    Böylece C:\ içerisinde deneme.abc adında bir dosyamız oluşturulmuş olacak.

    [​IMG]

    Ve son olarak, dosyamıza çift tıklayarak açıyoruz. Programımızın ekran görüntüsü aşağıdaki gibi olacaktır.

    [​IMG]

    Bu örnek uygulamadan yola çıkarak kendi programlarınıza istediğiniz dosyaları ilişkilendirebilirsiniz. Yapacaklarınız sadece bunlarla sınırlı değil tabi ki, birlikte aç menüsüne kendi programınızı ekleyebilmeniz buna bir örnek sayılabilir.

    Saygılarımla..
     
  2. By_Sheytan

    By_Sheytan Öğreniyorum rank8

    Kayıt:
    5 Ağustos 2007
    Mesajlar:
    203
    Beğenilen Mesajlar:
    0
    Ödül Puanları:
    0
    Eline Sağlık Güsel Anlatım extraokk
     
  3. Narqotic

    Narqotic Bilgiliyim rank8

    Kayıt:
    22 Nisan 2007
    Mesajlar:
    1.365
    Beğenilen Mesajlar:
    0
    Ödül Puanları:
    0
    Meslek:
    !!!
    Şehir:
    BeN SeNiN CaNıN İçİN ÖmRüMü BiR KiBRiTiN KaBıNDa T
    Süper Saolasın
     
  4. belirsizzzzz

    belirsizzzzz Aileden rank8

    Kayıt:
    21 Aralık 2007
    Mesajlar:
    7.655
    Beğenilen Mesajlar:
    0
    Ödül Puanları:
    0
    Meslek:
    CeyRRANNCI
    Şehir:
    Tokyo /Y.t
    harikasın mucX
     
  5. HastaInsan

    HastaInsan Aileden rank8

    Kayıt:
    19 Haziran 2007
    Mesajlar:
    7.766
    Beğenilen Mesajlar:
    0
    Ödül Puanları:
    0
    up detective