#REGISTRY ÜZERİNDE İŞLEMLER#
İsterseniz öncelikle regedit nedir? Ne işe yarar ondan bahsedelim. Regedit Türkçe karşılık olarak Sistem Kayıt Defteridir. Peki sistem kayıt defteri nedir? Sistem kayıt defteri programların özelliklerini barındırabileceğimiz microsoft’un oluşturduğu bir veri tabanıdır. Kısaca Regedit sistem kayıtlarının tutulduğu kısımdır.
İlk önce Sistem Kayıt Defterini tanıyalım. Sistem Kayıt Defteri kullanım amacına göre beş farklı mantıksal gruba ayrılmıştır.
HKEY_CLASSES_ROOT: Windows işletim sistemine yüklü uygulamalar ve dosya uzantıları hakkında bilgilerin saklandığı kısımdır.
HKEY_CURRENT_USER: İşletim sistemine giriş yapmış aktif kullanıcı ile ilgili tanımların saklandığı bölümdür.
HKEY_LOCAL_MACHINE: Bilgisayar ve tüm sistem kullanıcılarını ilgilendiren ayarların saklandığı bölümdür.
HKEY_USERS: HKEY_CURRENT_USER grubunda bulunan anahtarlara karşılık gelen bilgilerin saklandığı bölümdür.
HKEY_CURRENT_CONFIG: Anlık konfigürasyon hakkında bilgilerin saklandığı bölümdür.
Kayıt Defteri, Mantıksal gruplar altında bulunan anahtarlar, anahtarlar içerisinde bulunan alt anahtarlar şeklinde organize edilmiştir. Her bir anahtar içerisinde ad,tip, ve değer yapısında istenilen bilgilerin saklanabileceği alanlar bulunmaktadır.
#KAYIT DEFTERİ VERİ TİPLERİ#
Sistem Kayıt Defteri farklı veri tiplerini desteklemektedir. İşte bunlardan bazıları
REG_BINARY: İkili veri tipi.
REG_DWORD: Tam sayı veri tipi.
REG_EXPLAND_SZ: Genişleyebilir karakter dizi değerleri için kullanılmaktadır.
REG_SZ: Karakter veri tipi.
REG_MULTI_SZ: Boşluk veya virgül ile ayrılmış çoklu karakter dizi değerleri için kullanılmaktadır.
#KAYIT DEFTERİ İŞLEMLEMLERİ#
Kayıt Defterindeki bilgilere erişmek ve üzerlerinde işlem yapabilmek için Microsof.Win32.Registry sınıfının metotlarını kullanacağız.
Şimdi bu metot tiplerini biraz inceleyelim.
ClassesRoot: HKEY_CLASSES_ROOT mantıksal grubu içerisinde işlem yapabilmek için kullanılır.
CurrentConfig: HKEY_CURRENT_CONFIG mantıksal grubu içerisinde işlem yapabilmek için kullanılır.
LocalMachine: HKEY_LOCAL_MACHINE amntıksal grubu içerisinde işlem yapabilmek için kullanılır.
Users: HKEY_USERS mantıksal grubu içerisinde işlem yapabilmek için kullanılır.
GetValue: Parametre olarak iletilen anahtar ve ad içerisindeki değeri döndüren metottur. Okuma HKEY_CURRENT_USER grubu içerisinde yapılmaktadır.
SetValue: Parametre olarak iletilen anahtar ve ad içerisine değer yazmak için kullanılabilen metottur. Yazma HKEY_CURRENT_USER grubu içerisinde olur.
Registry.GetValue ve Registry.SetValue metotları, RegistryKey Sınıfı kullanmadan sadece HKEY_CURRENT_USER mantıksal grubu içerisindeki verilere erişim için pratik bir yöntemdir.
Sistem Kayıt Defteri yönetimi için Microsoft.Win32 ad alanı içerisinde tanımlı yardımcı tipler bulunmaktadır.
RegistryKey: Kayıt Defteri içerisindeki herhangi bir anahtarı simgeleyen sınıftır.
RegistryHive: Mantıksal grupları simgeleyen sayılabilir tiptir.
RegistryValueKind: Saklanan veri tipini simgeleyen sayılabilir tiptir.
Evet şimdi bu haftaki ödevimden bahsedeyim. Ödev şu şekilde bilgisayarın açılışında çalışan programların kontrolunu sağlayabilmek. Başlangıçta çalışsın ya da çalışmasın diye.
Programın Ekran görüntüsü bu şekilde
Kodları da şu şekilde
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;//Registry üzerinde işlem yapabilmek için kullanım kolaylığı açısından bu alanı ekledik.
namespace RegEditOrnek_26_02_2009
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string run = @"Software\Microsoft\Windows\CurrentVersion\Run";//Registry üzerinde işlem yapacağımız yolları tanıtıık.
string runpasif = @"Software\Microsoft\Windows\CurrentVersion\RunPasif";
RegistryKey anahtar;//isim tanımlamasını yaptık
void RegOku(string RegYol)//RegOku isminde bir metot oluşturduk.
{
anahtar = Registry.LocalMachine.OpenSubKey(RegYol,false);//İşlem yapacağımız registry bölümünü gösterdik.
//ikinci parametre sadece okuma işlemi yapılacağı için false.
listView1.View = View.Details;//tenımlamayı yaptık
ListViewItem oge;
foreach (string ad in anahtar.GetValueNames())//belirlediğimiz bölümdeki ad ve veri yollarını listview'e aktarıyoruz.
{
oge = new ListViewItem(ad);
oge.SubItems.Add(anahtar.GetValue(ad).ToString());
listView1.Items.Add(oge);
if (RegYol == run) oge.Checked = true;
}
anahtar.Close();
}
void RegYaz(string RegYol, string DegerAdi, string DegerYolu)
{
anahtar = Registry.LocalMachine.OpenSubKey(RegYol, true);
RegistryKey Regyaz = Registry.LocalMachine.CreateSubKey(RegYol);//Registry içerisinde yeni bir dizin oluşturuyoruz.
Regyaz.SetValue(DegerAdi, DegerYolu);//Oluşturduğumuz dizine veri girişi yapıyoruz.
anahtar.Close();//Registry ile işimizin bittiğini söylüyoruz.
}
void RegSil(string RegYol, string DegerAdi)
{
anahtar = Registry.LocalMachine.OpenSubKey(RegYol,true);//veri üzerinde işlem yapacaksak ikinci parametre true olmalı.
anahtar.DeleteValue(DegerAdi);//Belirlediğimiz alandaki veriyi siliyoruz
anahtar.Close();
}
void RegKontrol(string RegYol, string DegerAdi, string DegerYolu)
{
int islem=0;
int yol = 0;
if (RegYol == run) yol = 1;
anahtar = Registry.LocalMachine.OpenSubKey(RegYol,false);
foreach (string ad in anahtar.GetValueNames())
{
if (ad == DegerAdi) { islem = 1; break; }
}
if (islem == 0)
{
RegYaz(RegYol, DegerAdi, DegerYolu);
if (yol == 1)
RegSil(runpasif, DegerAdi);
else
RegSil(run, DegerAdi);
}
anahtar.Close();
}
private void Form1_Load(object sender, EventArgs e)
{
RegOku(run);
RegOku(runpasif);
}
private void btnUygula_Click(object sender, EventArgs e)
{
foreach (ListViewItem item in listView1.Items)
if (item.Checked == true) RegKontrol(run, item.Text, item.SubItems[1].Text);
else if(item.Checked==false) RegKontrol(runpasif, item.Text, item.SubItems[1].Text);
listView1.Items.Clear();
RegOku(run);
RegOku(runpasif);
}
private void btniptal_Click(object sender, EventArgs e)
{
Close();
}
}
Yok Bunlara rağmen olmadı diyorsan. Belki Registry İşlemleri işini çözebilir.
Yorumlar