C# ile Kendi Ekran Alıntısı Aracınızı Yazın: Windows’un Kısıtlamalarını Aşın!

Selam dostlar! Bugün, hepimizin sıklıkla kullandığı Windows’un kendi ekran alıntısı aracının küçük ama can sıkıcı bir eksikliğini giderecek, kendi çözümümüzü nasıl kodlayacağımızı anlatacağım. Biliyorum, “Aaa, Windows’un zaten var!” diyeceksiniz. Haklısınız ama bir düşünün: Windows’un aracıyla bir ekran görüntüsü aldığınızda, yeniden seçim yapmak için aracı tekrar açmanız gerekmiyor mu? İşte bizim uygulamamız tam da bu noktada devreye giriyor.

Bu küçük proje, tek bir kısayol tuşuyla (Ctrl+Shift+S) istediğiniz kadar ekran görüntüsü almanıza, hatta seçim alanınızı anında yeniden ayarlamanıza olanak tanıyor. Üstelik, tüm bu işlemleri kendi kodlarımızla, sıfırdan yapıyoruz.

Projenin tamamına ve tüm kodlara GitHub üzerinden ulaşabilirsiniz. İsterseniz hazır dosyasını buradan indirip hemen deneyebilirsiniz.


Projenin Kalbi: Global Kısayol Dinleme

Uygulamamızın en havalı yanı, arka planda sessizce çalışırken bile sizin belirlediğiniz klavye kısayoluna anında tepki vermesi. Bu sihir, AppContext sınıfı ve onun içinde gizlenen GlobalHotkey ile gerçekleşiyor.

GlobalHotkey, Windows API’sinden yardım alarak sistem genelinde Ctrl+Shift+S kısayolunu dinliyor. Yani, hangi uygulamada olursanız olun, bu tuşlara bastığınızda bizim uygulamamız uyanıyor ve ekran alıntısı moduna geçiyor.

C#

public class AppContext : ApplicationContext
{
    // ...
    _hotkey = new GlobalHotkey(Modifiers.Control | Modifiers.Shift, Keys.S);
    _hotkey.HotkeyPressed += (_, __) => StartSnip();
    _hotkey.Register();
    // ...
}

Bu kod sayesinde, tıpkı profesyonel bir araç gibi her zaman hazır ve nazır bir yardımcıya sahip oluyoruz.


Yeniden Alan Seçimi: İşte Fark Yaratan Özellik

Windows’un dahili aracının aksine, bizim uygulamamızda ekran alıntısı moduna girdiğinizde, fareyle bir seçim yaptıktan sonra bile hemen yeniden seçim yapma şansınız var. SnipOverlayForm adını verdiğimiz şeffaf katman, siz fareyi serbest bıraktığınızda kapanmıyor; aksine, seçim alanını koruyarak size yeniden boyutlandırma ve yeniden seçim yapma özgürlüğü sunuyor.

C#

// SnipOverlayForm sınıfında fare hareketlerini yöneten kısım
private void OnMouseMove(object? sender, MouseEventArgs e)
{
    var curr = PointToScreen(e.Location);

    if (_resizing)
    {
        _selection = AdjustSelection(curr);
    }
    else if (_dragging)
    {
        _selection = MakeRect(_start, curr);
    }
    // ...
}

Fareyi hareket ettirerek, daha önce yaptığınız seçimi kolayca değiştirebilirsiniz. Bu, mükemmel bir ekran görüntüsü yakalamak için tekrar tekrar kısayola basma derdini tamamen ortadan kaldırıyor.

Çekim ve Kaydetme İşlemi: Şeffaf Arayüz, Temiz Görüntü

Gelelim en can alıcı noktaya: ekran görüntüsünün temiz olması. SnipOverlayForm üzerindeki karartma efekti, seçim kutusu ve butonlar, resim alınırken görüntüyü bozabilir. Ancak biz bu sorunu basit ama etkili bir yöntemle çözüyoruz:

C#

private bool CaptureScreenRegion()
{
    if (_selection.Width <= 0 || _selection.Height <= 0) return false;

    // Formu geçici olarak gizleriz
    Hide();
    
    _captured = new Bitmap(_selection.Width, _selection.Height);
    using (var g = Graphics.FromImage(_captured))
    {
        // Gizledikten sonra ekranı yakalarız
        g.CopyFromScreen(_selection.Location, Point.Empty, _selection.Size);
    }
    
    // İşlem bittikten sonra formu kapatırız
    return true;
}

Yukarıdaki kod bloğu sayesinde, SnipOverlayForm ekran yakalama anında kendini saklayarak, sadece istediğimiz piksellerin yakalanmasını sağlıyor. Bu, net ve temiz bir ekran görüntüsü elde etmemizin anahtarı.

Son olarak, “Panoya Kopyala” ve “Kaydet” butonları da tıpkı bu kod gibi, sizin için esneklik sağlıyor. Seçimi kopyalayıp anında başka bir uygulamaya yapıştırabilir veya istediğiniz bir konuma kaydedebilirsiniz.

Bu proje, C# ile Windows formları ve API’leri kullanarak ne kadar güçlü ve kullanışlı uygulamalar geliştirebileceğinizin harika bir örneği. Kendi ekran alıntısı aracınızı oluşturarak, hem kısıtlamaları aştık hem de kişiselleştirilebilir, harika bir araç ortaya çıkardık.


GitHub Proje Linki Uygulama İndirme Linki

Umarım bu yazı, sizi kendi projelerinizi geliştirmeye teşvik eder. Eğer aklınıza takılan bir soru olursa, yorumlarda buluşalım!





Share

Yorum Yap