Seçkin Üye
Selamlar, bu gün Native Win32 API'leri hakkında bilgi vereceğim. Bu konu diğer tüm .NET konularından daha fazla ilginizi çekecek. Bu konu sadece C#, VB gibi dilleri değil tüm .NET ailesi için geçerlidir.
Bir çok .NET ile yazılmış hilelerde olsun, donanım erişimlerinde olsun, yüksek izin gerektiren işler için bu API'ler çok önemlidir. Çünkü .net makine diline çok yakın bir dil değildir. Assembly, C++, C gibi diller ile C#-VB.net dilleri aynı değildir.
Nedir bu Win32 API'si?
Native Win32 API'ler, Windows da birleşik olarak bulunan API'lerdir. .NET ailesinde yerleşik olarak bulunmayan Windows ile alakalı fonksiyonları kullanmamızı sağlayan ise InteropServices adında bir classdır. Yani tüm Windows fonksiyonları aslında özel olarak yazılmış API'ler ile yapılır.
Nerden geliyor bu API?
Bu API fonksiyonları harici bir kaynaktan (DLL'den) alınır. Bu API'ler C++ ve C gibi makine diline çok yaklaşmış dillerde yazılmıştır, ve bu dillerde zaten bulunur. W32 API'leri tümleşik olarak .Net ailesinde yoktur. (Aslında saydığım diller harici hiç bir dilde yoktur. Harici olarak kullanılması gerekir.) Interopservices sayesinde bu dillerde bulunan apileri .net ailesinde de kullanabiliyoruz.
Neden C++, C gibi dillere özel?
Bu fonksiyonlar neden .net ailesinde yok? çünkü .net dilleri (C#, VB, F#) managed olarak yazılmıştır. Bu diller yazılırken güvenli olması amacıyla yazılmıştır örnek verecek olursak .NET'de bulunan GC (garbage collector) otomatik olarak bellek yönetimi yapar. Yani .net ailesi güvenliği amaçlamış dillerdir, C++, C, ASM gibi diller de bazı fonksiyonlar tehlikeli olabilir. İşte bu yüzden C, C++ fonksiyonlarının bazıları .NET'de yoktur.
.NET ailesinde de, System.Runtime.InteropServices sınıfı ile bu API'leri aktarıp .net ailesinde de kullanabiliriz.
Not: Sadece C# bilgim olduğundan aşağıda yazıcağım kodlar csharp içindir. Diğer .net dilleri için de syntaxlar benzerdir.
Örneğin yukarda User32 APIsinin SetForegroundWindow API'sini kullanıyoruz. Bu Dll'leri kafanıza göre yazamazsınız, ama bunun için tüm Windows dll'lerini içeren depoya bakabilirsiniz.
Kısaca anlatımı böyle, bu dll'ler başınıza iş açabilir ama çokda yararlı olabilir. Doğru kullanmasını bilirseniz gerçekten çok yararlı ve dil bilginizi çok güçlendirecek, uygulamanıza yeni bir soluk getirecektir.
Bu konuyu ayak üstü yazdım bugün duzenleyeceğim.
Okuduğunuz için teşekkürler.
Bir çok .NET ile yazılmış hilelerde olsun, donanım erişimlerinde olsun, yüksek izin gerektiren işler için bu API'ler çok önemlidir. Çünkü .net makine diline çok yakın bir dil değildir. Assembly, C++, C gibi diller ile C#-VB.net dilleri aynı değildir.
Nedir bu Win32 API'si?
Native Win32 API'ler, Windows da birleşik olarak bulunan API'lerdir. .NET ailesinde yerleşik olarak bulunmayan Windows ile alakalı fonksiyonları kullanmamızı sağlayan ise InteropServices adında bir classdır. Yani tüm Windows fonksiyonları aslında özel olarak yazılmış API'ler ile yapılır.
Nerden geliyor bu API?
Bu API fonksiyonları harici bir kaynaktan (DLL'den) alınır. Bu API'ler C++ ve C gibi makine diline çok yaklaşmış dillerde yazılmıştır, ve bu dillerde zaten bulunur. W32 API'leri tümleşik olarak .Net ailesinde yoktur. (Aslında saydığım diller harici hiç bir dilde yoktur. Harici olarak kullanılması gerekir.) Interopservices sayesinde bu dillerde bulunan apileri .net ailesinde de kullanabiliyoruz.
Neden C++, C gibi dillere özel?
Bu fonksiyonlar neden .net ailesinde yok? çünkü .net dilleri (C#, VB, F#) managed olarak yazılmıştır. Bu diller yazılırken güvenli olması amacıyla yazılmıştır örnek verecek olursak .NET'de bulunan GC (garbage collector) otomatik olarak bellek yönetimi yapar. Yani .net ailesi güvenliği amaçlamış dillerdir, C++, C, ASM gibi diller de bazı fonksiyonlar tehlikeli olabilir. İşte bu yüzden C, C++ fonksiyonlarının bazıları .NET'de yoktur.
.NET ailesinde de, System.Runtime.InteropServices sınıfı ile bu API'leri aktarıp .net ailesinde de kullanabiliriz.
Not: Sadece C# bilgim olduğundan aşağıda yazıcağım kodlar csharp içindir. Diğer .net dilleri için de syntaxlar benzerdir.
C#:
[DllImport("User32.dll")]
public static extern int SetForegroundWindow(IntPtr ptr);
Örneğin yukarda User32 APIsinin SetForegroundWindow API'sini kullanıyoruz. Bu Dll'leri kafanıza göre yazamazsınız, ama bunun için tüm Windows dll'lerini içeren depoya bakabilirsiniz.
Bağlantıları görmek için lütfen
Giriş Yap
Kısaca anlatımı böyle, bu dll'ler başınıza iş açabilir ama çokda yararlı olabilir. Doğru kullanmasını bilirseniz gerçekten çok yararlı ve dil bilginizi çok güçlendirecek, uygulamanıza yeni bir soluk getirecektir.
Bu konuyu ayak üstü yazdım bugün duzenleyeceğim.
Okuduğunuz için teşekkürler.