| Makale Tarihi : 26 Aralık 1999
Yazan:Can Kaynak |
|
REGISTRY
Bir uygulama; son pencere boyutu, kullanıcı
ayarları ve kullanıcı tarafından kullanılan son dosyalar gibi bilgileri saklamak
için ini dosyası kullanmalıdır.
32-bit windows'da configrasyon dosyaları miladını
tamamladı. Şimdi, bu tip bilgileri biz windows kayıt veri tabanında (kısaca Registry
) tutarız. Registry 16-bit windows'da da vardı ama bu kadar geniş kullanım alanları
sunmuyordu.32-bit windows programlarında hiç bir şey sizi configrasyon dosyası
kullanmamaya zorlamıyor. fakat registry uygulama verilerini tutmanın gelişmiş bir yolu
ve mutlaka bunu öğrenmelisiniz.
Bu makalede size TRegistry sınıfını kullanarak
nasıl Registry'e ulaşabileceğinizi anlatacağım. Nasıl bir anahtar yaratacağınızı
anahtar bilgilerini nasıl yazacağınızı ve nasıl bunları kullanacağınızı
öğreteceğim.
Registry nedir?
Registry; Windows'un configrasyonu yada sizin
programınızın tanımlanmış uygulama verilerin tutulduğu basit bir veri tabanıdır.
Registry'nin nihai görevi OLE nesnelerinin birbirleri ile iletişimi için OLE
bilgilerini tutar(Bu Registry'nin orijinal kullanışıdır). Registry
dosyaların birlikte açılmalarını sağlayan izleri
barındırır. Örneğin bir metin belgesine tıkladığınız zaman bu notepad.exe
programı ile birlikte açılır.
Registry tıpkı sürücülerini dizinleri ve alt
dizinleri gibi hiyerarşik bir yapıya sahiptir. Üsteki anahtara anahtar, alttaki
anahtarlara alt-anahtar denir.(Bu yabancılar ne tuhaf di mi?)
Registry'nin aşağıdaki tabloda anlatıldığı gibi
4 ana anahtarı vardır. Genellikle siz tek bir anahtarı kullanacaksınız o da ikinci
anahtar olan HKEY_CURRENT_USER. Burada uygulamanızın belirlenmiş bilgilerini
tutabilirsiniz.
Tablo 1: Ana Registry Anahtarları
| Anahtar |
Açıklama |
| HKEY_CLASSES_ROOT |
OLE ve Windows'un çalışma bilgilerini içerir |
| HKEY_CURRENT_USER |
Varolan kullanıcıların kuruduğu değişik
bilgileri içerir. Uygulamada belirtilmiş verileri yada Windows'un verilerini
içerebilir. |
| HKEY_LOCAL_MACHINE |
Genellikle sistem hakkında donanım bilgilerini
içerir. Başka bilgilerde içerebilir. |
| HKEY_USERS |
Sistemdeki tüm kullanıcılar için genel bilgiler
ve varsayılan kullanıcı bilgilerini içerir. |
Registry bir ikilik veri tabanıdır.
Registry editor uygulaması tarafından yada sadece kod yardımı ile değiştirilebilir.
Regedit.exe windows gözatıcısı tarzında (Şekil 1'de gösterildiği gibi Solda
anahtarların listesi sağda anahtarların değerleri )registry hiyerarşisini gösterir.
Regedit Registry'i aramanızı Registry bilgilerini görmenizi ve registry'i
değiştirmenizi sağlar.
Not:Unutmayın!!! Eğer ne yaptığınızı
bilmiyorsanız hiçbir şekilde anahtarlarla oynamayın.
Şekil 1 Regedit Registry anahtarlarını ve
verileri gösteriyor.
Registry ve siz
Hangi verileri registry'de tutarız? Tabi ki bu
uygulamanızın ne yaptığına bağlı. Aşağıda bazı genel tutulan bilgiler bir
listesini görüyorsunuz.
- Uygulamanın son boyutu ve pozisyonu
- Uygulamanın durumu(normal büyük yada simge
durumunda)
- Child pencerelerin son durumu.
- En son açılan dosyaların yolları
- Kullanıcı ayarları
- Dosya yerleri
- Uygulamada belirtilen özel maddeler
Son madde uygulamanız için herhangi bir özel veriyi
tutabilir. Örnek olarak Delphi'nin Kullanıcı seçimlik ayarları da registry'de
tutulur. Bu bilgi derleyici ayarları, bağlayıcı ayarları,düzenleyici ayarları,form
tasarım ayarları,öğe paleti ayarlarını vs. içerir. Hangi veriyi Registry'de tutmak
istediğiniz sadece size bağlı.
Bir noktaya dikkatinizi çekmek isterim;Kaliteli
uygulamalar kullanıcının hayatını kolaylaştırmak için Registry'i kullanırlar.
Örneğin uygulamada bir dosya açarsam bir dahaki dosya açışımda dizin iletişim
kutusunun varsayılan dizin olarak o dizini belirlemesini isterim. Registry bu tür
verileri kaydetmeyi ve tekrar çağırmayı kolaylaştırmıştır.
TRegistry
VCL Registry ile çalışmak için TRegistry
sınıfını ortaya koymuştur. TRegistry anahtar yaratmak,anahtarları açmak,veri yazmak
veri okumak, anahtarları silmek, anahtarları kaldırmak gibi işler yapar. TRegistry şu
veri tiplerini sağlar.
- Binary data(Kullanıcı-tanımlı)
- Boolean(bool)
- Currency(Currency sınıfı)
- Date(TDatetime Sınıfı)
- Float(float yada Double)
- İnteger(int)
- String (AnsiString Sınıfı)
- Time(TDatetime sınıfı)
Registry gerçekte 3 tip veri tutar: string, integer
ve binary. VCL diğer veri tipleri için gerçek tipleri değişikliğe uğratır.
Örneğin VCL currency,Date,Datetime,Float ve Time veri tiplerini binary data tipinden
oluşturur.ve registry'de öyle tutar. bu adımlar size açık endişelenmeyin fakat
farkında olun.
Anlattığımız bu veri tipleri kullanılabilir, pek
çok configrasyon değerini string olarak tutma imkanına da sahipsiniz. hatta integer
verilerinizi bile. Eğer Delphi için yapılan Registry girişlerine bakarsanız boolean
değerler tıpkı bir string gibi tutulmuştur. Hangi metodu kullanacağınız size
bağlı.
Tregistry size anlattığımız veri tiplerini okuma
ve yazma metotları sağlar. String veriyi okuma metoduna ReadString yazmaya
WriteString denilir ve bu her veri tipi için böyle devam eder gider.
Anahtarları yaratmak
Registry ile çalışırken ilk öğrenmeniz gereken
anahtar yaratmaktır. TRegistry'yi kullanmak için ilk önce yapmanız gereken
kullanacağınız formun uses bölümüne Registry yazmak olacak tıpkı
aşağıdaki örnekte olduğu gibi:
uses
Windows, Messages, SysUtils,
Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, Registry;
Şimdi bir anahtar yaratabiliriz.
MyRegistry := TRegistry.Create;
MyRegistry.OpenKey('\Software\Myapps\Settings',
True);
MyRegistry.Free;
Bu örnek kodda açıklamamız gereken bir kaç şey
var. ilk önce Tregistry snıfından bir nesne yarattık. TRegistry nesneniz oldu zaman
Openkey metodunu kullanarak aynı anda hem yaratabilir hemde açabilirsiniz. Eğer
OpenKey'in son parametresine True Değeri verirseniz. VCL'e Eğer yoksa bunu yaratmasını
söylemiş olursunuz.
Settings adında bir anahtar yarattığımızı
görüyorsunuz. Fakat bu anahtar nereye yaratılıyor? cevabı Tregistry'nin içinde
yatıyor. Tregistry HKEY_CURRENT_USER anahtarını varsayılan olarak belirlemiştir.
Genelde anahtarı değiştirmeye pek ihtiyaç duyulmaz ama kullanmak için kök anahtarın
da ismini yazmanız gerekir.
Örneğimizde Settings anahtarı
HKEY_CURRENT_USER\Software\Myapp'ın içinde oluşturulacaktır. Bu gerçek Registry
kullanımında yeni bir açı ortaya koyar. Software anahtarı uygulamalar için kök
anahtardır. Software altında uygulamanızın ismiyle bir anahtar yaratmalısınız. Bu
anahtarın altında uygulamanıza ait verileri tutabilir yada yeni alt-anahtarlar
yaratabilirsiniz. Regedit'i boş verip Software anahtarına bakarsak mutlaka
bilgisayarınızda bulunan programlarını pek çoğunun listesini göreceksiniz. Mesela
delphi'nin anahtarı HKEY_CURRENT_USER\Software\Borland\Delphi\4.0. dır. Registry'de
bilgilerinizi tutarken mutlaka böyle bir yöntem izlemeye özen gösterin. Böylece elle
değiştirilmesi gereken anahtarlarda kullanıcılarınız size teşekkür edecektir.
Createkey metodu kullanıldığında sadece anahtarı
yaratır anahtarı açmaz. Bu yüzden CreateKey'in ardından openkey'i kullanırız.
En son olarak Closekey'i çağırmamız
gerekiyor.Fakat dikkatinizi çektiyse hiç kullanmadım çünkü bunu benim yerime
TRegistry'nin Destructor'ü yapıyor.CloseKey'i başka bir anahtarı kullanacağımız
zaman kullanmalıyız. Unutmayın ki Registry'de Sadece bir tane açık anahtar
bulunabilir.
Okumak Yazmak ve Aritmetik
Anahtarı yarattıktan sonra içinne herhangi bir veri
girebilirsiniz. Uygulamanız sonra bu veriyi okuyacak ve uygun şekilde kullanacaktır.
WriteXXX metotlarıyla bir veri nesnesi yaratabilirsiniz. Tıpkı aşağıdaki örnekte
olduğu gibi:
MyRegistry := TRegistry.Create;
MyRegistry.OpenKey('\Software\Myapps\Settings',
True);
MRURegistry.WriteString('LastFile','myfile.txt');
MRURegistry.WriteString('LastDirectory','C:\');
MRURegistry.WriteString('Data',1);
MyRegistry.Free;
Yukarıdaki örnekte bir anahtar yaratıp üç tane
veriyi bu anahtar altına depoladık. Gördüğünüz gibi Settings anahtarı üç veri
nesnesi bulundurmakta bunlar Data,LastDirectory,LastFile. Bu bir kural değildir. Regedit
otomatikman veri nesnelerini sıralar ve verilerinize kolayca erişmenizi sağlar.
Registry'den okumak çok basit bir işlemdir.
Örneğin son kullanılan dosyayı istiyorsunuz.Aşağıdaki kod bunu size anlatır.
var
FileName: String;
MyRegistry := TRegistry.Create;
MyRegistry.OpenKey('\Software\Myapps\Settings', True);
FileName :=
MyRegistry.ReadString("LastFile");
MyRegistry.Free;
Gördüğünüz gibi Registry'ye ulaşmak ve onu
kullanmak epeyce kolay sizde artık uygulamalarınızı buna göre ayarlarsanız
Kullanıcılarınıza çok büyük kolaylıklar sağlamış olursunuz. Kolay gelsin. |