Free Web Hosting Provider - Web Hosting - E-commerce - High Speed Internet - Free Web Page
Search the Web

5680
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.