Yazarlar Sözlük Makaleler Yardım Masası Gözlük Forum İstatistik

Tüm Başlıklar XML

1.  Windows işletim sisteminde kullanıma hazır temel API seti. Altı bölüme ayrılmış :

Base services :
Temel hizmetler. Mesela dosya sistemleri, aygıtlar, processler ve thread'ler, Windows registery gibi konularla ilgili API. (kernel32.dll)

Graphics Device Interface (GDI) :
Ekran, printer gibi çıktı birimleri üzerinde çizim işlemleri yapmak için kullanılan API. (gdi32.dll)

User Interface :
En temel UI elementleriyle (Button, TextBox, vb.) ilgili API. (user32.dll)

Common Dialog Box Library :
Dosya açma, kaydetme, yazıcı seçme, vb. standart dialog kutularını içeren API. (comdlg32.dll)

Common Control Library :
StatusBar, ToolBar, TabPage, vb. daha sofistike UI kontrollerine içeren API. (comctl32.dll)

Windows Shell :
İşletim sistemi kabuğunda* sunulan fonksiyonelliğe erişmek için kullanılan API. (shell32.dll)
fizikci
18 Kasım 2005 13:16
2.  Görsel Windows API uygulamaları mesaj tabanlı çalışır. Bir işlemi yapmak için ilgili nesneye mesaj gönderir, nesne üzerinde oluşan değişiklikleri takip etmek için ondan gelen mesajları dinlersiniz.

Tüm mesajlar window procedure denilen özel bir fonksiyona gönderildiği için mesajları dinleme ve mesajın türüne göre gerekli işlemleri yapma işi window procedure içinden yapılır. Her pencerenin kendi window prosedürü vardır, ve ilginç olan bir konu; ekran üzerinde yer kaplayan her şey bir penceredir. Bu nedenle Windows API'de TextBox, ComboBox, Button gibi nesneler yoktur, bunların yerine sadece bir tane Window nesnesi vardır. Bu nesne WNDCLASS(EX) yapısıyla* tanımlanır ve CreateWindow(Ex) API fonksiyonuyla oluşturulur. Bir kere tanımlanan window'un sınıf adını (WindowClass) kullanarak bunun bir çok benzerini oluşturabilirsiniz.

Windows'da tanımlanmış hazır window sınıfları vardır. Bunlara örnek olarak EDIT (TextBox), BUTTON (Button), COMBOBOX (ComboBox) sınıflarını sayabiliriz. Bu pencereler (herşeyin pencere olduğunu tekrar hatırlatayım) kendilerine ait bazı mesajları yine kendileri ele alırlar. Örneğin bir butona basıldığında içine çökmesi, bırakıldığında yükselmesi BUTTON isimli pencere sınıfının varsayılan davranışıdır. Bu sınıf window prosedüründe WM_MOUSEDOWN ve WM_MOUSEUP mesajlarını yakaladığında kendisine WM_PAINT mesajını gönderir ve WM_PAINT mesajını yakaladığında o anki durumuna göre çizim yapar. (Diye tahmin ediyorum. Ya da yalandan kim ölmüş. Ya da yamuluyorsam beni düzeltin. :) Sonuçta çalışma mantığı budur ama implementasyonu burada anlattığımdan biraz daha farklı olabilir.

Windows API kullanarak Merhaba Dünya uygulaması yazmak için 40-50 satır kod yazmanız gerekir. Bu durum yeni başlayanların gözünü korkutsa da, mantığına bir kere alışınca, Windows API programlamanın çok da zor olmadığı görülecektir. Zaten bu zorluk, programcıya kazandırdığı programlama gücünün yanında hiç önemli değildir. Çünkü Windows API ile yapabilecekleriniz işletim sisteminin kabiliyetleriyle sınırlıdır. Yani bu hemen herşeyi yapabilirsiniz demek. Windows API ile DirectX, DirectSound, DirectPlay, vs. vs. vs. gibi yığınla API (ki bunlar System dizininde dll şeklinde kullanılmayı beklerler) emrinizdedir.
fizikci
17 Mart 2006 17:08
3.  FAQ : Windows API'yi öğrenmek ve kullanmak gerekli midir?

Elcevap : Bence gereklidir. Çünkü;

1. Bu kadar insan kullanıyorsa vardır bir bildikleri
Bilgisayarınıza kurduğunuz "kaliteli" programların çoğu C veya C++ ile Windows API kullanarak geliştiriliyor. Ben diyeyim Fotoşop, siz deyin Media Player. Olaya sürü psikolojisiyle yaklaşırsanız sadece bu durum bile Windows API'yi kullanmanız için iyi bir neden olabilir. Ama tek iyi neden bu değil.

2. Consistent API:
Windows işletim sisteminin yeni versiyonları çıksa bile Windows API hep aynı (consistent) kalıyor. Sadece yeni fonksiyonlar ekleniyor. Böylece, eğer isterseniz, yazdığınız programın Windows 3.1'den Windows XP'ye kadar tüm Windows işletim sistemleriyle düzgün olarak çalışmasını sağlayabilirsiniz.

3. No framework falan:
Yazdığınız programların dosya boyu çok küçük oluyor. Ve kullanıcınızın herhangi bir kütüphaneyi yüklemesi gerekmiyor. .NET veya Java ile yazdığınız programlar kütüphanesiz hiç bir işe yaramaz. Kullanıcılar, programınızı kullanabilmek için bu devasa kütüphaneleri bilgisayarlarına kurmak durumunda kalırlar.

4. Performans:
Başka kütüphanelerle yazdığınız Windows uygulamaları da Windows API'yi kullanır. Örneğin Java veya .NET, hatta Microsoft'un MFC'si, Borland'ın VCL kütüphanesi... Kendiniz direk API'yi kullanabilecekken neden aracılarla çalışıp performansınızı düşüresiniz ki? Burada "diğer kütüphaneler daha kolay oldukları için geliştirme süresini kısaltıp üretkenliği arttırıyor" denilebilir. "Palavra!" derim. Diğer kütüphanelerin öğrenilmesi daha kolay olabilir ama bir kere öğrendikten sonra geliştirme süreniz tamamen programcılığınızdaki ustalığınızla ilgili bir konudur. Usta bir assembly programcısı bile başka bir dilin programcısından daha hızlı ve üretken olabilir. Bu tamamen farklı bir konu yani.

5. Sınırsız teknoloji desteği:
Windows API programlamanın tekniğini bir kere öğrendikten sonra dll'ler ile sunulan yığınla teknoloji, MSDN kütüphanesinin de yardımıyla ayağınıza kadar geliverir. Hayal eder, biraz araştırır sonra da uygularsınız. Neden bu zenginlikten kaçıp, kısıtlı framework'lerde bir şeyler yapabilmek için third party araçlara el açasınız ki?

Daha fazla gaza gelmeden frene basıp bazı gerçekleri ifade etmekte de fayda var tabi. Örneğin .NET Framework kullanıyorsanız Windows API sizden o kadar da uzakta değildir. Örneğin C# kodunuzda
   [DllImport("user32.dll")]
   public static extern IntPtr DoSomethingIncredible();
şeklinde bir kullanım ile API fonksiyonlarına erişip, etinden sütünden faydalanabilirsiniz. Böyle bile olsa, Windows API programlamayı iyi bilen bir programcı .NET projelerinde bu lüksten dilediği gibi faydalanabilirken, API bilmeyen .NET programcıları genellikle bu tür external fonksiyonlara aval aval bakmaktan öteye geçemez. (Elbette çalışan kazanır elması kızarır. O ayrı konu.)

Bir de şu mesele var: Microsoft'un Longhorn kod adlı yeni işletim sisteminde geleceği söylenen WinFX kütüphanesinden bahsediliyor. WinFX'in Win'i Windows API, FX'i .NET Framework demekmiş. Yani .NET Framework ile Windows API'yi kullanmak çok daha kolay olacakmış. (MFC'nin .NET versiyonu gibi birşey sanıyorum) Ama Windows API yine yerinde kalacaktır. Windows API programcıları güçlerinden bir şey kaybetmeyecektir eminim. (Geçenlerde WinFX SDK'nın beta versiyonunu indirip kurdum. İşletim sistemi göçtü. Allah'tan ikinci partitionda (favorimiz) Linux vardı da, dosyalarımı kurtardım, Windows'u kurmak için de uğraşmıyorum, evde Linux takılıyorum. Zaten işyerinde Windows mahkumuyuz.)
fizikci
17 Mart 2006 18:53
4.  .NET ile Windows API fonksiyonlarını tanımlamak için kullanılan yönteme Platform Invoke deniyor. Windows ortamında çok sık ihtiyacımız olmasa da mobil uygulamalar geliştirirken oldukça faydalı oluyor.
bateristt
17 Mart 2006 21:23
Bu konuda bildiklerinizi bizlerle paylaşabilirsiniz
Tabi bunun için yazarsanız giriş yapmalı, yazar değilseniz yazar olmalısınız.


Bu başlığa bkz veren girişlerin başlıkları nedir?

Bu başlığa bkz veren girişler başka hangi başlıklara bkz verdiler?
© 2005, Bilişim Kulübü. (1171 ms)
Ne yapabilirsin: SubtitleClick ile İngilizceni Geliştir, Çınar Framework ile kod yaz, Eglencelik.org'ta biraz eğlen