Cevapla  Konu Gönder 
 
Derecelendir
  • 0 Oylar - 0 Yüzde
  • 1
  • 2
  • 3
  • 4
  • 5
C# ile kendi dosya türümüzü oluşturalım
03-23-2008, 11:25 AM
Mesaj: #1
C# ile kendi dosya türümüzü oluşturalım
Giriş

Merhaba,

Bu yazımızda C sharp kullanarak kendi dosya türlerimizi windows' a nasıl tanıtacağımızı ve kendi uygulamalarımıza özel dosya türlerini nasıl oluşturacağımızı öğreneceğiz.

Bu makaleyi yazmaya değerli arkadaşım Burak Yiğit KAYA nın kayıt defteri yazı dizisini okuduktan sonra karar verdim.

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ı:
//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 Göz Kırpan
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.
[Resim: 400]Böylece C:\ içerisinde deneme.abc adında bir dosyamız oluşturulmuş olacak.
[Resim: 400]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.
[Resim: 400]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.
Hepinize kolay gelsin.
Web Sayfasını Ziyeret Edin Tüm Mesajlarını Bul
Alıntı Yaparak Cevapla
« Önceki | Sonraki »
Cevapla  Konu Gönder 
Anahtar Kelimeler

C# ile kendi dosya türümüzü oluşturalım  ,C# ile kendi dosya türümüzü oluşturalım  indir,C# ile kendi dosya türümüzü oluşturalım  yükle,C# ile kendi dosya türümüzü oluşturalım  download,C# ile kendi dosya türümüzü oluşturalım  indirmek istiyorum,C# ile kendi dosya türümüzü oluşturalım  yükle,C# ile kendi dosya türümüzü oluşturalım  bedava, C# ile kendi dosya türümüzü oluşturalım  İNDİR,C# ile kendi dosya türümüzü oluşturalım  YÜKLE,C# ile kendi dosya türümüzü oluşturalımfree,C# ile kendi dosya türümüzü oluşturalımyukle,C# ile kendi dosya türümüzü oluşturalımİndir,C# ile kendi dosya türümüzü oluşturalımdownload,C# ile kendi dosya türümüzü oluşturalıminndir,C# ile kendi dosya türümüzü oluşturalım  Dvdrip,C# ile kendi dosya türümüzü oluşturalım  filmi indir,C# ile kendi dosya türümüzü oluşturalımonline izle,C# ile kendi dosya türümüzü oluşturalımsuper film,C# ile kendi dosya türümüzü oluşturalımbedava insit



Benzeyen Konular
Konu: Yazar Cevaplar: Görüntüleyenler: Son Mesaj
  Delphi - Dosya Arama Fonksiyonları Sadness 0 34 03-23-2008 11:20 AM
Son Mesaj: Sadness

Forum Atla: