Windows API Kullanımı: Temel Bilgiler ve Uygulamalar

Windows API, Windows işletim sistemi üzerinde yazılım geliştirmek için kullanılan bir dizi fonksiyon ve veri yapısını içerir. Bu makalede, Windows API'nin temel kullanımlarını ve örnek uygulamalarını inceleyeceğiz.

Eki 2, 2024 - 12:43
Eki 19, 2024 - 19:23
 0  145
Windows API Kullanımı: Temel Bilgiler ve Uygulamalar
Windows API Kullanımı: Temel Bilgiler ve Uygulamalar
Windows API Kullanımı: Temel Bilgiler ve Uygulamalar
İçindekiler

    1. Windows Dizinini Öğrenme

    Windows dizinini belirlemek için GetWindowsDirectory API'si kullanılır. Bu, uygulamanızın Windows dizininde dosyalarla çalışmasını sağlamak için önemlidir.

    Örnek:

    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
        TCHAR d[MAX_PATH];
        GetWindowsDirectory(d, MAX_PATH);
        ShowMessage(String(d));
    }

    Açıklama: GetWindowsDirectory fonksiyonu, belirtilen d değişkenine Windows dizinini atar. MAX_PATH sabiti, dizin adı için gerekli maksimum uzunluğu belirler.

    2. Bellek Durumunu Öğrenme

    Bellek durumu hakkında bilgi almak için GlobalMemoryStatus API'si kullanılır. Bu fonksiyon, sistemin fiziksel bellek kullanımı hakkında önemli veriler sağlar.

    Bellek Durumunu Öğrenmek için MEMORYSTATUS Yapısı:

    typedef struct _MEMORYSTATUS {
        DWORD dwLength;
        DWORD dwMemoryLoad;
        DWORD dwTotalPhys;
        DWORD dwAvailPhys;
        DWORD dwTotalPageFile;
        DWORD dwAvailPageFile;
        DWORD dwTotalVirtual;
        DWORD dwAvailVirtual;
    } MEMORYSTATUS, *LPMEMORYSTATUS;
    

    Örnek:

    void _fastcall TForm1::Timer1Timer(TObject *Sender)
    {
        MEMORYSTATUS m;
        GlobalMemoryStatus(&m);
        Label1->Caption = "Bellek kullanımı %" + IntToStr(m.dwMemoryLoad);
        Label2->Caption = "Toplam RAM: " + FloatToStr(m.dwTotalPhys / 1024.0 / 1024.0) + " MB";
        Label3->Caption = "Boş RAM: " + FloatToStr(m.dwAvailPhys / 1024.0 / 1024.0) + " MB";
    }
    

    Açıklama: Bu kod parçası, her zaman bellek durumunu güncelleyerek kullanıcı arayüzünde gösterir.

    3. İşlemci Bilgisi Alma

    Sistem hakkında bilgi almak için GetSystemInfo API'si kullanılır. Bu, bilgisayarınızdaki işlemci ile ilgili bilgileri sağlar.

    Örnek:

    void _fastcall TForm1::FormCreate(TObject *Sender)
    {
        SYSTEM_INFO s;
        GetSystemInfo(&s);
        Caption = IntToStr(s.dwNumberOfProcessors) + " işlemci, tip: " + IntToStr(s.dwProcessorType);
    }

    Açıklama: Bu kod, sistemdeki işlemci sayısını ve türünü gösterir.

    4. Windows Versiyonunu Alma

    Windows versiyonunu ve ortamını öğrenmek için GetVersion API'si kullanılır. Bu fonksiyon, sistemin sürümü hakkında bilgi sağlar.

    Örnek:

    DWORD GetVersion(void);
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        DWORD s = GetVersion();
        unsigned maj = LOBYTE(LOWORD(s));
        unsigned min = HIBYTE(LOWORD(s));
        Label1->Caption = (s < 0x80000000) ? "Windows NT" : (maj < 4) ? "Win32s" : "Windows 95";
    }

    Açıklama: Bu kod, Windows sürümünü tespit eder ve kullanıcıya gösterir.

    5. Windows'u Kapatma

    Windows'u kapatmak veya bilgisayarı yeniden başlatmak için ExitWindowsEx API'si kullanılır.

    Örnek:

    void _fastcall TForm1::Button1Click(TObject *Sender)
    {
        if (Application->MessageBox("Windows yeniden başlatılacak. Onaylıyor musunuz?", "ReStart", MB_YESNO) == IDYES)
            ExitWindowsEx(EWX_SHUTDOWN, 0);
    }

    Açıklama: Bu fonksiyon, kullanıcıdan onay alarak Windows'u kapatır.

    6. Formlara Şekil Verme

    Formlarınız klasik dikdörtgen biçiminde olmayabilir; üçgen, elips veya başka şekillerde de oluşturabilirsiniz.

    Üçgen Form Örneği:

    void __fastcall TForm1::FormClick(TObject *Sender)
    {
        HRGN MyRgn;
        TPoint P[3] = { {0, 0}, {Width, 0}, {(int)Width / 2, Height} };
        MyRgn = CreatePolygonRgn(P, 3, WINDING);
        SetWindowRgn(Handle, MyRgn, true);
    }

    Elips Form Örneği:

    void __fastcall TForm1::FormDblClick(TObject *Sender)
    {
        HRGN sekilHandle;
        sekilHandle = CreateEllipticRgn(0, 0, Width, Height);
        SetWindowRgn(Handle, sekilHandle, true);
    }

    Kumbet Form Örneği:

    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
        HRGN SekilHandle; 
        TPoint p[9] = {
            {100, 100}, {350, 0}, {350, 0}, {550, 100}, 
            {550, 200}, {350, 300}, {250, 300}, {100, 200}, 
            {100, 100}
        };
        SekilHandle = CreatePolygonRgn(p, 9, 0);
        SetWindowRgn(Handle, SekilHandle, true);
    }

    W Form Örneği:

    void __fastcall TForm1::TForm1(TComponent *Owner)
              : TForm(Owner)
    {
        HRGN alan; 
        TPoint noktalar[10] = {
            {0, 0}, {50, 0}, {180, 200}, {218, 100},
            {256, 200}, {385, 0}, {435, 0}, {256, 300},
            {218, 200}, {180, 300}
        };
    
        alan = CreatePolygonRgn(noktalar, 10, ALTERNATE);
        SetWindowRgn(Handle, alan, true);
    }

    7. Kontrolleri Taşıma

    Kullanıcının kontrolleri ekranda istediği noktalara taşıyabilmesi için Perform metodu kullanılabilir.

    Örnek:

    void __fastcall TForm1::Button1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
    {
        ReleaseCapture();
        Button1->Perform(WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
    }

    8. Program Çalıştırma

    Bir uygulamayı çalıştırmak için WinExec API'si kullanılabilir.

    Örnek:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        WinExec("c:\\Windows\\calc.exe", SW_SHOW);
    }

    9. ShellExecute Kullanımı

    Farklı dosya türlerini çalıştırmak için ShellExecute API'si kullanılır.

    Örnek:

    void _fastcall TForm1::Button1Click(TObject *Sender)
    {
        ShellExecute(0, "open", "e:\\zpx.bmp", "", NULL, SW_SHOW);
    }

    10. Görev Çubuğundan Gizleme

    Bir uygulamayı görev çubuğundan gizlemek için SetWindowLong API'sini kullanabilirsiniz.

    Örnek:

    void _fastcall TForm1::FormCreate(TObject *Sender)
    {
        SetWindowLong(Application->Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
    }

    11. CD-Kapağını Açıp Kapatma

    CD-ROM kapağını açıp kapatmak için mciSendString API'si kullanılabilir.

    Örnek:

    mciSendString("set cdaudio door open", NULL, 0, 0);

    Tepkiniz nedir

    like 0

    Beğendim

    dislike 0

    Beğenmedim

    love 0

    Muhteşem

    funny 0

    Eğlendim

    angry 0

    Sinirlendim

    sad 0

    Üzüldüm

    wow 0

    Vay