C ya da C++ ile uğraşanlar pointer yapısını ve nekadar zorlayıcı olduklarını bilirler.Java'da pointer yapısı yoktur. Ancak bu ortamda pointer yapısına destek verilmektedir. Aralarındaki önemli farklardan biri olarak da bunu söyleyebiliriz.Bunun en önemli sebebi ise WinApi fonksiyonlarından yararlanmaktır.
Winapi fonksiyonlarının ayrıntı bir listesini görebilmek için burayı ziyaret edebilirsiniz.
Bu yapıyı kullanabilmememiz için System.Runtime.InteropServices isimalanındaki DllImprtAttribute sınıfını temsil eden DllImport özelliği kullanılır.external anahtar sözcüğü ile bu yapının CLR tarafından yönetilmeyen bir metot olduğunu bildirmemiz gerekmektedir.Bu metot daha önceden yazıldığı için içerisi doldurulmayacak sadece bildiriminin yapılması gerekmektedir.
Sistemi saniyede bir kontrol ederek sistemde o an aktif durumda bulunan pencerenin process
adının ve id bilgisinin ekrana yazıldığı bir console uygulaması geliştirdim.Görüldüğü gibi
[DllImport("User32.dll")]
static extern IntPtr GetForegroundWindow();
şeklinde tanımlaması yapılmaktadır ve geriye pointer tipi diyebileceğimiz IntPtr nesnesi döndürnektedir.

Bu yapı kullanarak sistem üzerinde bir çok iş yapılabilir ancak eğer Framework içerisinde uygun sınıflar varsa onların kullanıması daha uygundur.Örneğin MessageBox winapi kullanılarak da çağrılabilir ancak framework içerisinde bulunan sınıfın kullanılması daha mantıklıdır.WinApi Framework'ten yapılamayan işler için tercih edilmelidirler.
Örnek kodlara buradan ulaşabilirsiniz..
Hiç yorum yok:
Yorum Gönder