C# (csharp) da kayıt defterinden
kayıt okuma (read value from Registry), kayıt defterindeki kaydı güncelleme
(change value to Registry), kayıt defterine yeni kayıt yazma (write value to
Registry), kayıt defterindeki kaydı silme (delete value from Registry), kayıt
defterine yeni anahtar oluşturma (create key to Registry) ve kayıt
defterindeki anahtarı silme (delete key from Registry) işlemlerinin nasıl
gerçekleştirildiğini örneklerle sizlere aktarmaya çalışacağım. İlk olarak kayıt
defterinden kayıt okuma örneğini inceleyelim. Kayıt defteri üzerinde işlem yapabilmek Microsoft.Win32 kütüphanesini
projemize dahil etmemiz gerekmektedir. Bunun için aşağıdaki kod satırını
projemizin en baş kısmına eklememiz yeterli olacaktır.
using Microsoft.Win32;
Kayıt defteri üzerinde işlem yapabilmek için Registry sınıfının
özelliklerinden faydalanacağız. Kayıt defterinden değer okuma işlemi için
aşağıdaki örneği inceleyelim.
// Registry.ClassesRoot - Kayıt
Defterindeki Classes Root altındaki anahtarlara erişmek için
// Registry.CurrentConfig - Kayıt
Defterindeki Current Config altındaki anahtarlara erişmek için
// Registry.CurrentUser - Kayıt
Defterindeki Current User altındaki anahtarlara erişmek için
// Registry.LocalMachine - Kayıt
Defterindeki Local Machine altındaki anahtarlara erişmek için
// Registry.Users - Kayıt Defterindeki
Users altındaki anahtarlara erişmek için
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
RegistryKey key2 = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", false);
RegistryKey key3 = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
//OpenSubKey methodunu ile belirtiğimiz
anahtara erişip onu oluşturduğumuz key nesnesine aktardık
//İkinci parametre true olduğu zaman hem
okunabilir hem yazılabilir olarak açılır
//İkinci parametre false olduğu zaman yada
kullanılmadığı zaman sadece okunabilir olarak açılır
//Eğer anahtar mevcut değilse key nesnesi
null değerini alır
if (key!=null)
{
//GetValue methodu belirtiğimiz değeri
okumak için kullanılır.
//5 çeşit değer türü bulunmaktadır
//Dize Değeri (REG_SZ)
//İkili Değer (REG_BINARY)
//DWORD Değeri (REG_DWORD),
//Çok Dizeli Değer (REG_MULTI_SZ)
//Genişletilebilir Dize Değeri
(REG_EXPAND_SZ)
//Dize Değeri türündeki değer için
if (key.GetValue("DizeDeğeri") != null)
{
//Dize Değeri türündeki
değer string olarak kullanılabilir
MessageBox.Show(key.GetValue("DizeDeğeri").ToString());
}
//İkili Değer türündeki değer için
if (key.GetValue("İkiliDeğer") != null)
{
//İkili değer
hexadecimal olarak tutuluyor.
byte [] dizi = (byte [])key.GetValue("İkiliDeğer");
for (int i = 0; i < dizi.Length; i++)
{
//byte dizisindeki değerler hexadecimal sisteme çeviriyoruz.
//Eğer hexadecimal formatına çevirmezsek değerler onluk sistemde
gösterilecektir.
MessageBox.Show(String.Format("{0:x2}", dizi[i]));
}
}
//DWORD türündeki değer için
if (key.GetValue("DWORDDeğeri") != null)
{
//16 lık
sistemdedir. bize 10 luk sistemdeki değerini döndürür.
//Tekrardan 16 lık
sisteme çeviriyoruz.
//Eğer 16 lık sisteme
çevirmezsek 10 luk sistemde gözükecektir
MessageBox.Show(String.Format("{0:x2}",key.GetValue("DWORDDeğeri")));
}
//Çok Dizeli Değer türündeki değer için
if (key.GetValue("ÇokDizeliDeğer") != null)
{
//String Dizisi olarak
kullanılır
string [] dizi = (string [])key.GetValue("ÇokDizeliDeğer");
for (int i = 0; i < dizi.Length; i++)
{
MessageBox.Show(dizi[i]);
}
}
//Genişletilebilir Dize Değeri türündeki
değer için
if (key.GetValue("GenişletilebilirDizeDeğeri") != null)
{
//Genişletilebilir dize
değeri de string olarak tutulmaktadır.
MessageBox.Show(key.GetValue("GenişletilebilirDizeDeğeri").ToString());
}
}
//Kullandığımız key nesnesini kapatarak
işlemi sonladırıyoruz
key.Close();
Bütün türler için okuma işlemi yukarıdaki kod bloğunda gösterildiği
gibidir. Yeni değer oluşturma ve var olan değeri güncelleme işlemlerini örnek
üzerinde inceleyelim. Bu iki işlem aynı şekilde gerçekleştirilmektedir.
Aşağıdaki kod örneğinde bu iki işlemin nasıl gerçekleştirildiğini inceleyelim.
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",true);
//Güncelleme ve Yeni Değer oluşturma
işlemi için belirttiğimiz anahtarı yazılabilir modda açmamız gerekmektedir.
//Yani ikinci parametreyi true olarak
belirlemeliyiz
if (key != null)
{
//SetValue methodu iki şekilde
çalışmaktadır.
//Birincisi iki parametreli, değer adı ve
değer değeri.
//İkincisi 3 parametreli değer adı,değer
değeri ve değer türü
//SetValue methodu kullanırken eğer
belirttiğimiz adda bir değer mevcut ise o değerin değeri güncellenir
//Eğer belirttiğimiz adda bir değer yoksa
yeni değer oluşturulur.
//Değer türünü belirtmezsek ikinci
parametre türüne bakılır
//string tipinde olduğu için Değer türü
Dize Değeri (REG_SZ) olarak tanımlanır
//Ayrıca değer değerinin türü
long,byte,double,char olursa yine Dize Değeri (REG_SZ) olarak tanımlanır
key.SetValue("DizeDeğeri", "61");
key.SetValue("DizeDeğeri2", (long)61);
key.SetValue("DizeDeğeri3", (double)61);
key.SetValue("DizeDeğeri4", (byte)61);
key.SetValue("DizeDeğeri5", 'A');
//Eğer 3. parametreyi yani değer türünü
String olarak belirtirsek 2. parametrenin türüne bakılmaz
//İkinci parametre integer olsa bile Değer
türü string olarak belirtildiği için
//gönderilen değer string e çevirilip o
şekilde işleme alınacaktır ve Dize Değeri olarak tanımlanacaktır
key.SetValue("DizeDeğeri6",61, RegistryValueKind.String);
//Değer türünü belirtmezsek değer
değerinin tipi byte tipinde dizi olursa
//değer türü İkili Değer (REG_BINARY)
olarak tanımlanır.
byte[] diziByte = new byte[] { 1, 2, 3 };
//Kayıt defterinde 16 hexadecimal sistemde
tutulur.
key.SetValue("İkiliDeğer", diziByte);
//Değer türünü Binary olarak belirtiğimiz
için Değer Türü İkili Değer olarak tanımlanacaktır.
//Burada ikinci parametre byte türünde
dizi olmak zorunda.
//Format dönüştürme işlemini kendisi
gerçekleştirmemektedir.
key.SetValue("İkiliDeğer2", diziByte, RegistryValueKind.Binary);
//Değer türünü belirtmezsek değer
değerinin tipi integer olursa
//değer türü DWORD Değeri (REG_DWORD)
olarak tanımlanır.
key.SetValue("DWORDDeğeri", 55);
//Değer türünü belirtirsek değer değerinin
türü long,string,double olsa bile değer türü
//DWORD Değeri (REG_DWORD) olarak
tanımlanır
key.SetValue("DWORDDeğeri2", (long)66,RegistryValueKind.DWord);
key.SetValue("DWORDDeğeri3", (byte)66, RegistryValueKind.DWord);
key.SetValue("DWORDDeğeri4", (double)66, RegistryValueKind.DWord);
key.SetValue("DWORDDeğeri5", "66", RegistryValueKind.DWord);
//Değer değerinin türü char olursa
karakter kodu kaydedilir. Örn A ise 65 olarak kaydedilir.
key.SetValue("DWORDDeğeri6", 'A', RegistryValueKind.DWord);
//Değer türünü belirtmezsek değer
değerinin tipi string tipinde dizi olursa
//değer türü Çok Dizeli Değer
(REG_MULTI_SZ) olarak tanımlanır.
string[] diziString = new string[] { "Sinan", "AKYAZICI", "www.sinanakyazici.com" };
key.SetValue("ÇokDizeliDeğer", diziString);
//Değer türünü MultiString olarak
belirtiğimiz için Değer Türü Çok Dizeli Değer olarak tanımlanacaktır.
//Burada ikinci parametre string türünde
dizi olmak zorunda.
//Format dönüştürme işlemini kendisi
gerçekleştirmemektedir.
key.SetValue("ÇokDizeliDeğer2", diziString,RegistryValueKind.MultiString);
//Eğer Genişletilebilir Dize Değeri
türünde değer kaydetmek istiyorsak değer türünü
//ExpandString olarak belirtmemiz
gerekmektedir.
//Değer değerinin türü
string,integer,long,double,byte,char olabilir.
key.SetValue("GenişletilebilirDizeDeğeri", "33", RegistryValueKind.ExpandString);
key.SetValue("GenişletilebilirDizeDeğeri2", 33, RegistryValueKind.ExpandString);
key.SetValue("GenişletilebilirDizeDeğeri3", (long)33, RegistryValueKind.ExpandString);
key.SetValue("GenişletilebilirDizeDeğeri4", (double)33, RegistryValueKind.ExpandString);
key.SetValue("GenişletilebilirDizeDeğeri5", (byte)33, RegistryValueKind.ExpandString);
key.SetValue("GenişletilebilirDizeDeğeri6", 'A', RegistryValueKind.ExpandString);
//Registry de yaptığımız
değişikliklerin diske kaydedilmesi için Flush methodunu çağırıyoruz
key.Flush();
}
//Kullandığımız key nesnesini kapatarak
işlemi sonlandırıyoruz.
key.Close();
Kayıt Defterinden değer silme işlemini aşağıdaki örnek üzerinde
inceleyelim.
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",true);
//Silme işlemi için belirttiğimiz anahtarı
yazma modunda açmamız gerekmektedir.
if (key != null)
{
//Silmek istediğimiz denemeDeğer adında
bir değer olup olmadığını kontrol ediyoruz.
//Çünkü öyle bir değer yoksa ve bunu
silmek istersek hata meydana gelecektir.
if (key.GetValue("DizeDeğeri")!=null)
//DeleteValue methoduna
değerin adını gönderip silme işlemini gerçekleştiriyoruz.
key.DeleteValue("DizeDeğeri");
//Registry de yaptığımız değişikliklerin diske kaydedilmesi için Flush
methodunu çağırıyoruz
key.Flush();
}
//Kullandığımız key nesnesini kapatarak
işlemi sonlandırıyoruz.
key.Close();
Son olarak anahtar oluşturma ve anahtar silme işlemlerini örnek üzerinde
inceleyelim.
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
//Belirttiğimiz anahtarı yazılabilir modda
açmamız gerekmektedir.
if (key != null)
{
//Belirttiğimiz anahtar altında başka bir
anahtar oluşturmak istersek
//CreateSubKey methoduna anahtar ismini
vererek kullanırız.
//Verdiğimiz isimde anahtar yoksa yeni bir
anahtar oluşturur ve onu geriye döndürür,
//Verdiğimiz isimde anahtar varsa geriye o
anahtarı döndürür OpenSubKey methodu gibi
RegistryKey key2 = key.CreateSubKey("Deneme");
//Oluşturduğumuz yeni anahtar altında
aşağıdaki gibi yeni değer oluşturabiliriz
key2.SetValue("DizeDeğeri", "Deneme Dize Değeri");
//Silme işleminde dikkat edeceğimiz bir
nokta var.
//Silmek istediğimiz anahtarın üst
dizininde olmamız gerekir.
//Yani Deneme anahtarını silmek için bir
üsteki Run anahtarına konumlanmamız gerek
//Silme işlemi için DeleteSubKey methoduna
anahtar ismini vererek kullanırız
key.DeleteSubKey("Deneme");
//DeleteSubKey methodu ile silmek
istediğimiz anahtar altında başka anahtar varsa hata meydana gelecektir.
//Eğer altındaki bütün anahtarla birlikte
silmek istersek DeleteSubKeyTree methodunu kullanmamız gerekir
key.DeleteSubKeyTree("Deneme");
//Registry de yaptığımız
değişikliklerin diske kaydedilmesi için Flush methodunu çağırıyoruz
key.Flush();
key2.Flush();
key2.Close();
}
//Kullandığımız key nesnelerini kapatarak
işlemi sonlandırıyoruz.
Hiç yorum yok:
Yorum Gönder