| 
                
             | 
        
        
            
                
                    
                        | 
                            C# ile Windows Registry İşlemleri(Microsoft.Win32) | 
                        
                             | 
                                
                     
                    
                        
                            
	
    
		
            | Gönderiliyor lütfen bekleyin... |   
        
	 
    
 
                         | 
                     
                 
             | 
        
        
            
                
                Hemen hemen her profesyonel uygulamada gördüğümüz Registry'ye yazma ve ordan 
  okuma işlemlerinin nasıl yapıldığını basit bir uygulama ile anlatacağız. Düşününki 
  bir uygulama geliştirdik ve uygulama her çalıştığında kullanıcıyı selamlamak 
  istiyoruz ve uygulamayı kaçıncı defa çalıştırdığını söylemek istiyoruz ona. 
  Bunun bir çok yolu olmasına rağmen en güzel ve en güvenilir yolu ilgili bilgileri 
  Windows un registry dediğimiz bölgesinde tutmaktır. registry dediğimiz yerler 
  olmasaydı pek ala bu işi dosyaya yazma ve okumayla da yapabilirdik. Regsitery 
  bölgesini okuma ve yazma amaçlı .NET framework sınıf kütüphanalerinden faydalanacağız. 
  Bu sınıflar Microsft.Win32 isimalanının altında bulunmaktadır. Bu sınıfların 
  en çok kullanılan metodlarını ve özelliklerini anlatmaya başlamadan önce programızın 
  yapısını kısaca anlatayım.
 
  
Bir console uygulaması oluşturacağız. Program 
  ilk çalıştığında bize bundan sonraki açılışlarında bizi selamlaması için 
  adımızı soracak.Daha sonra programı çalıştırdığımızda "Hoşgeldin Sefer. Programı 
  3. defa çalıştırıyorsunuz." diyecek. Programın kaç defa çalıştığını anlamak 
  için ise program ilk açıldığında registry bölgesine "1" değerini yazacağız 
  ve programın her çalıştığında o değeri bir artıracağız. Böylece programın 
  kaç defa çalıştığını öğrenmiş olacağız. Tabi eğer Windows un  
  aracıyla daha önceden uğraştıysanız bizim programlama yoluyla değiştirdiğimiz 
  değerleri kendi ellerinizle gidip değiştirebilirsiniz. Demek istediğim burda 
  şifre ve kullanıcı adı gibi bazı kişiye özel bilgilerin saklanması pek güvenli 
  değildir. 
   
  Eğer şu ana kadar registry hakkında bir bilginiz yoksa Start->Run ' menusune 
  gelip regedit yazarak registry hakkında biraz bilgi edinebilirsiniz. Bu programla 
  rastgele değerler silerseniz bazı programlarınız zarar görebileceği için tavsiyem 
  her hangi bir silme işlemi yapmayan ve sadece neler olup  
  bittiğine bakın. 
   
  Şimdi C# ın büyük bir kolaylık sağladığı registry yazma ve okuma için geliştirilmiş 
  RegistryKey sınıfının işlevlerini görelim. 
   
  
:::: 
  RegistryKey Sınıfı(Microsoft.Win32) ::::. 
   
   Bildiğiniz 
  gibi windowsun register yapısı ağaç şeklindeki klasörlere benzer. Her yeni anahtar 
  altında bir alt anahtar açabildiğimiz gibi anahtarlar altında yeni "string" 
  yada "int" gibi değerler oluşturup programla ilgili istediğimiz değerleri 
  saklayabiliriz. Bu ise klasörlerde oluşturduğumuz dosyalara benzer. Daha öncede 
  dediğimiz gibi buraya regedit le kolayca ulaşabildiğimiz için güvenlik amaçlı 
  bilgileri (şifre vs) veya programımızla ilgili kritik bilgileri(serial number 
  vs) burada saklamamamız gerekir. Biz bu programdaki bilgilerimizi HKEY_LOCAL_MACHINE\Software 
  altında csnedir isimli bir alt anahtar oluşturarak kaydedeceğiz.  
   
  RegisteryKey sınıfı türünden bir nesne oluşturmak için ya RegiteryKey sınıfının 
  static üye fonksiyonu olan OpenSubKey() metodunu yada yada Register sınıfının 
  static üyelerini kullanırız. Aşğıda detaylı olarak bu metodlar hakkında bilgi 
  bulabilirsiniz. 
   
  :: CreateSubKey() Metodu :: 
   
  Geriye RegistryKey 
  türünden bir nesne dödüren bu fonksiyon yeni bir alt anahtar oluşturur yada 
  var olan bir anahtarı okumak için açar.Fonksiyonun prototipi aşağıdaki gibidir. 
  Unutmayın bu metodu kullanabilmek için ilgili kullanıcının register bölgesine 
  erişim hakkının olması gerekir. Aksi halde SecurityException hatası oluşur. 
   
  public RegistryKey CreateSubKey(string subkey); 
   
  :: 
  OpenSubKey() Metodu :: 
   
  Bu metod 
  iki şekilde kullanılabilir, overload edilmiş iki metod aşağıdaki gibidir. 
   
  public RegistryKey OpenSubKey(string);//Bu metod anahtar okumak amcıyla kullanılır 
  ve geriye RegisteryKey döndürür. 
   
  public RegistryKey 
  OpenSubKey(string,bool);//Bu metod ilk metod ile aynıdır fakat eğer açılacak 
  anahtara yazmada yapacaksak ikinci parametreyi true olarak girmemiz gerekir. 
  Varsayalın olarak ReadOnly açılır. 
   
   
  :: 
  DeleteSubKey() Metodu :: 
   
  Bu metod 
  iki şekilde kullanılabilir, overload edilmiş iki metod aşağıdaki gibidir. 
   
   
  public void DeletSubKey(string);//Parametre olarak gönderilen alt anahtarı siler. 
   
  public void DeletSubKey(string,bool);//Parametre 
  olarak gönderilen alt anahtarı siler.İkinci parametre ise belirtilen alt anahtarın 
  olmaması durumunda "ArgumentNullException" hatasının yakalnıp yakalanmayacağını 
  gösterir.Eğer true ise bu hata yakalanır, false ise herhangi birşey olmaz. 
   
  :: 
  DeleteSubKeyTree() Metodu :: 
   
  Bu metod 
  iki belirtilen anahtardaki bütün anahtarları siler.Bir dosyayı sildiğinide içindeki 
  tüm dosyaları sildiğiniz gibi.Prototipi aşağıdaki gibidir. 
  public 
  void DeletSubKeyTree(string); 
   
  :: 
  DeleteValue() Metodu :: 
   
  İki şekilde 
  kullanılabilir.Parametre olarak belirtilen değeri anahtardan siler.İkinci 
  parametre ise DeleteSubKey() metodunda olduğu gibi hata yakalanıp yakalanmayacağını 
  belirtir.  
   
  :: 
  Flush() Metodu ::  
   
  Registry 'de yaptığımız 
  değişiklikleri diske kaydetmek için bu metodun çağrılması gerekir. 
   
  :: 
  GetSubKeyNames() Metodu ::  
   
  Be metod geriye 
  döndürdüğü string dizisine ilgili anahtardaki alt anahtar isimlerini doldurur.Prototipi 
  aşağıdaki gibidir. 
   
  public string[] GetSubKeyNames()  
   
  :: 
  GetValue() Metodu ::  
   
  İlgili anahtardaki 
  değerin içeriğini object türü olarak geri dönderir.İki şekilde kullanılabilir. 
  Parametrik yapısı aşağıdaki gibidir. 
   
  public object GetValue(string) 
  public object GetValue(string,object) //eğer değer yoksa varsayılan olarak parametre 
  olarak verilen object geriye döner. 
   
  :: 
  GetValueNames() Metodu ::  
   
  İlgili anahtardaki 
  bütün değerleri bir string dizine aktarır.Parametrik yapısı aşağıdaki gibidir 
   
  public string[] GetValueNames() 
   
  :: 
  SetValue() Metodu ::  
   
  Birinci parametresi 
  ile belirtilen anahtara ikinci parametresi ile belirtilen bilgi aktarılır.Parametrik 
  yapısı aşağıdaki gibidir. 
   
  public void SetValue(string,object) 
   
  :: 
  Name Özelliği ::  
   
  Taban anahtardan 
  itibaren(mesela HKEY_LOCAL_MACHINE) ilgili anahtarın tam yolunu verir. 
   
  :: 
  ValueCount Özelliği ::  
   
  Anahtarda bulunan 
  değerlerin sayısını verir. 
   
   
  RegistryKey sınıfının üye elmanları ve oluşturduğu exception sınıfları ile ilgili 
  detaylı bilgiyi MSDN Online' dan yada .NET Framework SDK Documentation ' dan 
  edinebilirsiniz. 
   
  Şimdi yazımızın başında bahsettiğimiz örnek uygulamamıza göz atalım.Aşağıda 
  bulunan kaynak kodda satır aralarına size yardımcı olacak yorumlar ekledim. 
   
  //registry.cs 
   
  using System; 
  using System.Win32 
  //RegistryKey sınıfını kaynakkodda direkt kullanabilmek 
  için bu isimalanını ekledik.  
   
  class CsReg 
  { 
     public static void Main() 
     { 
        RegistryKey register;       register =
    Registry.LocalMachine.OpenSubKey(@"Software\csnedir",true); 
        //HKEY_LOCAL_MACHINE/Software/csnedir 
  anahtarını oluşturup anahtara yazma modunda açıyoruz.  
  
 
        if (register.GetValue("ad") == 
  null) 
        { 
        /*Bu if bloğunda programın 
  ilk defa çalışması durumu ile ilgili işlemler yapılıyor.Programın ilk defa çalıştığını 
  register.GetValue("ad") ==null ifadesi ile anlıyoruz. Kullanıcıdan 
  isim alınıp registry de "ad" isimli anahtara yazılıyor ve tabili "Oturum" 
  adınıda programı bir defa çalıştırdığını belirten 1 değeri yazılıyor*/ 
            Console.WriteLine("Lütfen 
  adinizi yaziniz"); 
            string ad = Console.ReadLine(); 
            register.SetValue("ad",(string)ad); 
            register.SetValue("oturum",1); 
            Console.WriteLine("Tesekkürler..."); 
        } 
        else 
        { 
        /*Bu blokta ise programın 
  sonraki çalışmaları ile ilgili işlemler yapılıyor. Oturum sayısı registry den 
  okunup aritmetik işem yapabilmek için ilgili formata dönüştürüdükten sonra tekrar 
  yeni değeri ile registry ye yazılıyor.Aynı şekilde registry den "ad" 
  değeri alınarak kullanıcı selamlanıyor.*/  
            string ad = (string)register.GetValue("ad");
  
 
            int oturum_sayisi=Convert.ToInt32(register.GetValue("oturum"))+ 
  1; 
            register.SetValue("oturum",oturum_sayisi); 
            Console.WriteLine("Hosgeldin 
  " + ad); 
            Console.WriteLine("Programi 
  " + oturum_sayisi + " kez açtiniz"); 
            Registry.LocalMachine.Flush(); 
            } 
        } 
  }
  
                
                Makale: 
                C# ile Windows Registry İşlemleri(Microsoft.Win32) C#, Visual C# ve .NET Sefer Algan 
             | 
        
        
            | 
             | 
        
        
            | 
                 
             | 
        
        
            
                
                
                    
                        - 
                            
                        
 
                        - 
                            
Eklenen Son 10  
                         
                        - 
                            
Bu Konuda Geçmiş 10 
                         
                     
                    
                        
                            Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
                         
                        
                            Son Eklenen 10 Makale Yükleniyor
                         
                        
                            Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
                         
                     
                 
                
                
             | 
        
        
            | 
                
             |