Arkasokak Logo
Kayıtsız, hoş geldiniz.





Forum Arkasokak > HAYATIN İÇİNDEN > İnternet Teknoloji Tasarım » Dosyaları Açacak Programı Belirlemek (Association)
Belli bir uzantıya sahip dosyaları kendi programımızla açabilmemiz için bilmemiz gereken en temel bilgiler... Merhaba; Çoğu Visual Basic sitelerinin forumlarında ...

Cevap
  #1  
Eski 07-03-2006, 09:31 AM
empedoCles kullanıcısının avatarı
Müdavim
 
Giriş: Sep 2005
Mesaj: 123
empedoCles İtibar düzeyini kapadı
Dosyaları Açacak Programı Belirlemek (Association)

Belli bir uzantıya sahip dosyaları kendi programımızla açabilmemiz için bilmemiz gereken en temel bilgiler...Merhaba;

Çoğu Visual Basic sitelerinin forumlarında kullanıcıların Association, yani belirli bir uzantıya sahip dosyaları kendi hazırladıkları programla nasıl çalıştırabilecekleri konusunu bilmedikleri, bu konu hakkında yardım istedikleri fakat tatmin edici sonuca ulaşamadıklarını gözlemliyorum. Bu nedenle Association konusuna açıklık getirecek bu dokümanı yazıp konu ile ilgilenenlerin hizmetine sunmaya karar verdim.

Öncelikle öğrenmemiz gereken en temel bilgi çoğu konunun olduğu gibi bu konunun da çözümünün Registry (Kayıt) dosyalarında yattığıdır. Dokümanın sonunda hem Association konusunu, hem de bir nebze de olsa Registry'e API kullanarak kayıt yazmayı öğreneceğiz.

Örneğimize başlamamız için kendimize bir dosya uzantısı, bir de bu uzantıdaki dosyaları açacak program seçmeliyiz. Ben dokümanda örnek teşkil etmesi için dosya uzantısı olarak ".asp", program olarak ta kendi yazdığım "ASP Anahtarı" isimli programı seçtim. İşe başlamadan önce projemizde "Registry" bir modül oluşturarak aşağıdaki API tanımlamalarını bu modül içerisine yerleştirelim ve kaydedelim.

Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Public Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long

Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const REG_SZ = 1

Public Sub RegKaydiYaz(hKey As Long, Anahtar As String, DegerAdi As String, Deger As String)
Dim Ac 'Oluşturulacak anahtarın adresi
RegCreateKey hKey, Anahtar, Ac 'Anahtarı oluşturduk
RegSetValueEx Ac, DegerAdi, 0, REG_SZ, ByVal Deger, Len(Deger) 'Anahtarımızın "DegerAdi" isimli değerine "Deger" parametresi ile gelen String değeri atadık.
RegCloseKey Ac 'Ve açtığımız anahtarı kapattık.
End Sub


Registry isimli modülü oluşturduysanız devam edebiliriz. Dosya uzantılar ve bunları açacak programlarla ilgili bilgiler Registry'nin HKEY_CLASSES_ROOT anahtarı altında yer alırlar. Windows'un RegEdit Programını kullanarak bu anahtarı açtığımızda önümüze ilk önce dosya uzantıları sıralanır. Biz bu dosya uzantıları arasından kendi programımızla açmak istediğimiz uzantıyı buluyoruz. Eğer istediğimiz uzantı burada bulunmuyorsa hemen oluşturuyoruz. Bunun için formumuzun Load olayına aşağıdaki kodları ekleyip (isterseniz) programımızı Run>Start menüsü (ya da klavyenin F5 tuşu) ile çalıştıralım.


Eğer kaydetmek istediğimiz uzantı daha önce Registry kayıtlarında mevcut ise RegEdit'i kullanarak bu kaydın değerlerini bir kenara kaydedin. Aksi halde bu işin geri dönüşü olamayabilir.


Private Sub Form_Load()

'RegKaydiYaz(hKey As Long, Anahtar As String, DegerAdi As String, Deger As String)
RegKaydiYaz HKEY_CLASSES_ROOT, ".asp", "", "ASPAnahtari"

End Sub




Artık RegEdit'i açtığımızda eğer daha önceden ".asp" adında anahtar yoksa oluşturulduğunu, aksi halde varsayılan değerinin bizim atadığımız şekilde değiştiğini göreceksiniz. İsterseniz modülümüze eklediğimiz "RegKaydiYaz" isimli alt yordamın çalışma prensibini detaylı olarak işleyelim.

hkey = HKEY_CLASSES_ROOT (Kayıt yapılacak anahtarın ismini bu parametre ile belirtiyoruz. Bu parametrenin değeri Long tipinde olması gerektiğinden alt yordamımız içinde Sabit değişkenle bunu daha önceden atamıştık. Diğer anahtarların Long değerlerini öğrenmek için VB 6.0 ile gelen APILoad.exe programını kullanabilirsiniz).
Anahtar = ".asp" (Açtığımız anahtara alt anahtar olarak gireceğimiz değeri bu parametre ile belirtiyoruz. Dolayısıyla bu parametre programımızla birlikte açılmasını istediğimiz dosya türünün uzantısı olacak).
DegerAdi = "" (Açtığımız alt anahtarın hangi isimli değerine veri ataması yapacağımızı bu parametre ile belirtiyoruz. Boş bırakmamızın sebebi varsayılan değere atama yapmamız gerektiğindendir.,
Deger = "ASPAnahtari" (Buraya dosya ".asp" uzantılı dosyaların hangi programla açılacağına dair bilgilerin bulunduğu anahtarın adını girmeliyiz. İstediğimiz değeri verebiliriz fakat buraya vereceğimiz değerin ayınısı ile yeni bir anahtar açıp bilgilerimizi buraya kaydetmemiz gereklidir).

Uzantımızı bilgisayara tanıttığımıza göre artık program bilgilerimizi de bildirmeliyiz. Bunun için yukarıda da belirttiğim gibi "RegKaydiYaz" alt yordamının "Deger" parametresine verdiğimiz değer ile aynı isimde bir alt anahtar oluşturmalıyız. Oluşturduğumuz bu anahtarın varsayılan değeri, ".asp" uzantısına sahip dosyaların dosya türüne verilen ad olacağından burayı da istediğimiz şekilde ayarlayabiliriz. Ben bu değeri "ASP Dosyası" olarak ayarladım ama bunu yazmasaydım bile bu değer Windows'ta böyle görünecekti. Bu anahtarı eklemek için formumuzun Load olayına yazdığımız koda şu aşağıdaki satırı da ekliyoruz:

RegKaydiYaz HKEY_CLASSES_ROOT, "ASPAnahtari", "", "ASP Dosyası"

Yukarıdaki kodu da ekleyip çalıştırdıktan sonra Registry kayıtlarında "HKEY_CLASSES_ROOT > .asp" ve "HKEY_CLASSES_ROOT > ASPAnahtari" isimlerinde iki tane alt anahtar oluştuğunu gözlemleyebilirsiniz. Şimdi en can alıcı noktaya sıra geldi. ".asp" uzantılı dosyaların Windows'ta hangi ikonla temsil edileceği ve hangi programla çalıştırılacağını belirten anahtarları ekleyeceğiz. Önce kısa olanı yapalım, ikon belirleyelim. Aşağıdaki kodu yukarıdaki diğer kodlara iliştirelim:

RegKaydiYaz HKEY_CLASSES_ROOT, "ASPAnahtari\DefaultIcon", "", "C:\Windows\ASPAnahtari.exe,3"

Projemizi şimdi çalıştıracak olursak "HKEY_CLASSES_ROOT > ASPAnahtari" isimli anahtarın altına "DefaultIcon" isminde bir anahtar daha eklendiğini göreceksiniz. Bu anahtarın varsayılan değeri ise ".asp" uzantılı dosyalarımızın kendilerini temsil eden ikonu nereden alacakları sorusuna cevap olacaktır. Yukarıdaki kodla bunu "C:\Windows\" dizininde bulunan "ASPAnahtari.exe" isimli programın içerdiği 3 nolu ikon olarak belirledim. Siz istediğiniz programın istediğiniz ikonunu kullanabilirsiniz. Tek yapmanız gereken programın yerini, adını ve kullanacağınız ikon numarasını örnekte görüldüğü gibi eklemek. İkonu da eklediğimize göre artık dosyalarımızı çalıştıracak programın yerini de tarif edebiliriz. Bunu yapmak için yine "HKEY_CLASSES_ROOT > ASPAnahtari" anahtarının altına "Shell" isminde, varsayılan değeri boş bir anahtar daha açmalıyız.

RegKaydiYaz HKEY_CLASSES_ROOT, "ASPAnahtari\Shell", "", ""

Tek başına bir şey ifade etmediği için buna değer atamaya ve üzerinde durmaya gerek yok. Sadece bundan sonra kalan iki anahtarı bu anahtarın altında açmamız gerekiyor. Sıradaki Anahtarımızın adı "Open" ve az önce de belirttiğim gibi bu anahtarı "HKEY_CLASSES_ROOT > ASPAnahtari > Shell" anahtarının altına açıyoruz.

RegKaydiYaz HKEY_CLASSES_ROOT, "ASPAnahtari\Shell\Open", "", "ASPAnahtarı ile Aç"



"Open" anahtarının varsayılan değeri, dosyamızın üzerinde sağ tıklandığında açılan menüde en üstte bulunan seçeneğe de ismini verecektir. Boş bırakırsak bu kla*** "Aç" olacaktır. Artık son hamleyi de yapıp işimizi bitirebiliriz. Bunun için "HKEY_CLASSES_ROOT > ASPAnahtari > Shell > Open" anahtarı altına "Command" isminde yeni bir anahtar açmalıyız. Bu anahtarın varsayılan değerine atayacağımız ifade ".asp" uzantılı dosyalarımızı çalıştıracak programın fiziksel yolu olmalıdır.

RegKaydiYaz HKEY_CLASSES_ROOT, "ASPAnahtari\Shell\Open\Command", "", "C:\Windows\ASPAnahtari.exe"

Bunu da yukarıdaki kodlara eklediğimizde elimizdeki kod aşağıdaki gibi olacaktır:

Private Sub Form_Load()

'RegKaydiYaz(hKey As Long, Anahtar As String, DegerAdi As String, Deger As String)
RegKaydiYaz HKEY_CLASSES_ROOT, ".asp", "", "ASPAnahtari"
RegKaydiYaz HKEY_CLASSES_ROOT, "ASPAnahtari", "", "ASP Dosyası"
RegKaydiYaz HKEY_CLASSES_ROOT, "ASPAnahtari\DefaultIcon", "", "C:\Windows\ASPAnahtari.exe,3"
RegKaydiYaz HKEY_CLASSES_ROOT, "ASPAnahtari\Shell", "", ""
RegKaydiYaz HKEY_CLASSES_ROOT, "ASPAnahtari\Shell\Open", "", "ASPAnahtarı ile Aç"
RegKaydiYaz HKEY_CLASSES_ROOT, "ASPAnahtari\Shell\Open\Command", "", "C:\Windows\ASPAnahtari.exe"

End Sub


Bu kodlarla Registry'de oluşturduğumuz anahtarlar ise:

HKEY_CLASSES_ROOT > .asp
HKEY_CLASSES_ROOT > ASPAnahtari
HKEY_CLASSES_ROOT > ASPAnahtari > DefaultIcon
HKEY_CLASSES_ROOT > ASPAnahtari > Shell
HKEY_CLASSES_ROOT > ASPAnahtari > Shell > Open
HKEY_CLASSES_ROOT > ASPAnahtari > Shell > Open > Command



Bundan sonra tüm ".asp" uzantılı dosyalar açılmak için bizim programımızı kullanacaktır. Eğer ".asp" uzantılı dosyalarımız daha önceden başka bir programla çalışıyorsa ve bu programı iptal etmeden kendi programımızı alternatif olarak sunmak istersek tek yapmamız gereken "Shell" anahtarının altına, "Open" anahtarı ile aynı özelliklerde, ismini kendi belirleyeceğimiz başka bir anahtar eklemek olacaktır. Böylece hem ".asp" uzantılı dosyalar daha önce çalıştıkları programla, hem de kullanıcının seçimine bağlı olarak bizim programımızla çalışacaktır. Bu da bir örnekle şöyle açıklanabilir:

HKEY_CLASSES_ROOT > .asp
HKEY_CLASSES_ROOT > ASPAnahtari
HKEY_CLASSES_ROOT > ASPAnahtari > DefaultIcon
HKEY_CLASSES_ROOT > ASPAnahtari > Shell
HKEY_CLASSES_ROOT > ASPAnahtari > Shell > Open
HKEY_CLASSES_ROOT > ASPAnahtari > Shell > Open > Command
HKEY_CLASSES_ROOT > ASPAnahtari > Shell > ASPAnahtarı
HKEY_CLASSES_ROOT > ASPAnahtari > Shell > ASPAnahtarı > Command

Görüldüğü gibi Association olayı zannedildiği kadar da zor değilmiş. İşinize yarayacağını tahmin ettiğim bu dokümanda bahsi geçen Visual Basic projesine aşağıdaki disket resmine tıklayarak, ASP Anahtarı isimli programı indirmek için ise buraya tıklayarak ulaşabilirsiniz. Hepinize çalışmalarınızda başarılar diliyorum. Başka dokümanlarda görüşmek dileğiyle...
empedoCles kullanıcısına MSN aracılığı ile mesaj yolla
Alıntı Yaparak Cevapla
Cevap

Konu Araçları
Görünüm Modları



Saat 08:08 PM.


Copyright ©2005 - 2008 Arkasokak.Net
Tasarım: NoDRaC
Bize Ulaşın - Gizlilik İlkesi - En Üst
Powered by vBulletin
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.2.0