Bu yazımızda VB NET dilinde API kullanımından ve WIN32 API ile yapılabilecek uygulamalardan bahsedeceğiz.
Windows işletim sistemi içinde birçok nesneye veya özelliğe VB .NET dili ile ulaşmamız henüz mümkün değildir. Burada dikkat ederseniz "henüz" diyorum çünkü VB Dilinin gelişim süreci içerisindeki değişikliklere bakıldığında bu dilin zamanla etkin bir Windows tabanlı uygulama dili olacağı muhtemeldir. VB. NET dili elbetteki bir Windows tabanlı programlama dilidir. Ancak bu dil henüz Windows üzerindeki hakimiyetini tam anlamıyla kuramamıştır. Böyle eksik kalınan noktada Windows üzerinde C türevli dillerle yazılmış bazı fonksiyonların kullanımı devreye girer ki bizde bunlara API (Application Programmer Interface- Uygulama Programı Arabirimi) diyoruz. Ancak bir noktanın özellikle dikkatini çekmek istiyorum. VB 6.0 ile yapılabilecek işlemler oldukça sınırlı idi ve Windows un alt fonksiyonlarına ulaşamıyordu. Ama .NET ile gelen evrim ile dildeki sınırlılıklar biraz olsun azaldı. Bu nedenle size tavsiyem VB:NET içindeki bir fonksiyon yada yordam ile yapabileceğiniz bir işlemi API kullanıp tanımlayarak yapmayınız bu performans konusundan veriminizi etkiler. Ayrıca dil bütünlüğü ve veri erişimi gibi konularda bu tür bir kullanım ciddi sıkıntılar doğurur.
Bu kadar teorik bilgiden sonra asıl işimiz olan Kod yazmaya ve uygulama geliştirmeye dönelim. Bir API yada DLL VB.NET içinde dış assembly olarak algılanır ve standar bir tanımlama bloğu içinde "Imports" anahtar kelimesi ile tanımlanır.
Eğer Kullanacağınız bir fonksiyon ise:
Örneğin User32.DLL içindeki bir Beep Fonksiyonunu tanımlayıp kullanalım Önce Proje içine Bir Class ekleyelim ve adını API olarak düzenleyelim. Class Kodu Aşağıdaki şekilde düzenlenir. Dış assembly için
[Public|Private] Declare Sub "Yordam Adı" (Yordamın argümanları)
Imports System. Imports System.Runtime.InteropServices Public Class API End Sub End Class
|
Daha sonra Form1 içindeki bir buton yerleştirelim. Kodu aşağıdaki gibi düzenleyelim.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim i, j As Integer i = 100 j = 20 API.Beep(i, j) Next Next End Sub |
Şimdi butona basalım bakalım neler olacak. Bu sadece basit bir örnekti isterseniz gelişmiş uygulamalar da yapabilirsiniz. Örneğin Disk bilgilerinizi öğrenebilirsiniz. Form üzerine İki "textbox" koyalım. Şimdi Textbox1 in adını Diskname olarak değiştirelim. Diğeride info olsun. Gerekli Kodu düzenleyelim. Class içine aktarılacak kodu yazalım.
Imports System Imports System.Runtime.InteropServices Public Class API Public Declare Function GetDiskFreeSpace Lib "kernel32" _ Alias "GetDiskFreeSpaceA" (ByVal diskadı As String, _ ByRef seektordebosalan As Integer, _ ByRef sektordekibytemiktari As Integer, _ ByRef bosalannumarası As Integer, _ ByRef Freespace As Integer) As Integer End Class |
Burada değişkenleri Türkçe anlam çağrıştıran değişkenler tanımladım ki hangi değişken ne işe yarıyor daha anlaşılır olsun. Şimdide Form İçindeki kodu yazalım.
Public Class Form1 Inherits System.Windows.Forms.Form Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim diskadı As String Dim bosalan As Integer Dim sektoralanı As Integer Dim bosalanno As Integer Dim freespace As Integer diskadı = Diskname.Text + ":\" API.GetDiskFreeSpace(diskadı, bosalan, sektoralanı, bosalanno, freespace) Info.Text = freespace.ToString End Sub End Class |
Hiç yorum yok:
Yorum Gönder