C# – Win32 API Aracılığıyla Mouse Olayları Yaratmak

Merhaba,

Önceki yazılarımdan C# İle Mouse’a Hükmedelim başlıklı yazımda Win32 API kullanarak mouse’a programatik müdahale ederek hareket ettirmeyi incelemiştik. Şimdi ise tekrardan Win32 API aracılığıyla programatik olarak mouse’a olaylar yarattıracağız. Tabi bu işlemi yaparken yukarıda verdiğim adreste yaptığımız gibi animasyon eşliğinde icra etmeye çalışacağız.

Öncelikle sizleri mouse eventları yaratacağımız sınıfımızla taşıntırayım.

    class MouseEventWin32
    {
        [DllImport("user32.dll")]
        static extern bool SetCursorPos(int x, int y);

        [DllImport("user32.dll")]
        public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);

        public const int MOUSEEVENTF_LEFTDOWN = 0x02;
        public const int MOUSEEVENTF_LEFTUP = 0x04;
        public const int MOUSEEVENTF_RIGHTDOWN = 0x08;
        public const int MOUSEEVENTF_RIGHTUP = 0x10;
    }

Yukarıdaki gördüğünüz üzere “mouse_event” isimli extern fonksiyon aracılığıyla faremize olay yarattırabileceğiz. Bunun dışında “SetCursorPos” extern fonksiyonu çok yabancı olmadığımız, bir önceki makalede de kullandığımız farenin programatik lokasyonunu ayarlayan bir fonksiyondur. Diğer sabit değişkenlerimiz ise mouse tuşlarının binary karşılıklarını tutmaktadırlar.

Fareye programatik olay tanımlayabilmek için yukarıdaki sınıf içerisine aşağıdaki gibi metotlar tanımlamamız ihtiyacımıza dönük olacaktır.

        public static void SolMouseClick(int xpos, int ypos)
        {
            SetCursorPos(xpos, ypos);
            //Sol Tıkladı
            mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0, 0);
            //Sol Bıraktı
            mouse_event(MOUSEEVENTF_LEFTUP, xpos, ypos, 0, 0);
        }
        public static void SolMouseBasiliClick(int xpos, int ypos)
        {
            SetCursorPos(xpos, ypos);
            //Sol Tıkladı
            mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0, 0);
        }
        public static void SagMouseClick(int xpos, int ypos)
        {
            SetCursorPos(xpos, ypos);
            //Sağ Tıkladı
            mouse_event(MOUSEEVENTF_RIGHTDOWN, xpos, ypos, 0, 0);
            //Sağ Bıraktı
            mouse_event(MOUSEEVENTF_RIGHTUP, xpos, ypos, 0, 0);
        }
        public static void SagMouseBasiliClick(int xpos, int ypos)
        {
            SetCursorPos(xpos, ypos);
            //Sağ Tıkladı
            mouse_event(MOUSEEVENTF_RIGHTDOWN, xpos, ypos, 0, 0);
        }

Bu metotları aşağıdaki gibi kullanırsak programatik olarak gayemizi gerçekleştirmiş olacağız.

            MouseEventWin32.SolMouseClick(500, 300);
            Thread.Sleep(1500);
            MouseEventWin32.SagMouseBasiliClick(500, 700);
            Thread.Sleep(1500);
            MouseEventWin32.SolMouseBasiliClick(500, 200);
            Thread.Sleep(1500);
            MouseEventWin32.SagMouseClick(550, 250);

Tabi benim asıl amacım olayları animasyonlu bir şekilde yaratabilmek. Haliyle bunun üzerine bir çalışma gerçekleştirmiş bulunmaktayım. Yapmış olduğum çalışmanın nitelik ve özelliklerini hızlı bir şekilde incelemek için görsel olarak aşağıdaki videodan seyredebilirsin.

Tabi teknik olarak incelemek içinde projenin kaynak kodlarına aşağıdan erişebilirsiniz.
C# Win32 API Mouse Events Projesini indirmek için buraya tıklayınız.

Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

2 Cevaplar

  1. Kürşat dedi ki:

    Makale için teşekkür ederim. Açıklayıcı ve anlaşılır.

  2. Kasım dedi ki:

    Ellerinize sağlık çok teşekkür ederim

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*