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 **** 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 **** 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 **** SolMouseBasiliClick(int xpos, int ypos)
{
SetCursorPos(xpos, ypos);
//Sol Tıkladı
mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0, 0);
}
public static **** 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 **** 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?


Kaynak:https://www.gencayyildiz.com/blog/c-...lari-yaratmak/