[C#] Auf bestimmte Position klicken - Mausklick simulieren

Drucken
( 7 Votes )
Hauptkategorie: Programmieren Kategorie: C#
Erstellt am 19.12.2011 Zuletzt aktualisiert am 29.08.2012 Geschrieben von Jonny132
Dieses Tutorial gehört zwar eher in die Kategorie 'Spielereien', dennoch gibt es manchmal die Anforderung auf einer Bestimmten Bildschirmkoordinate einen Klick zu simulieren.
Da das .NET - Framework diese Anforderung von Haus aus nicht anbietet, müssen wir die user32.dll einbinden und diese Ansprechen. Klingt vielleicht etwas umständlich, ist aber garnicht schwer. Ich will euch das anhand eines Beispieles verdeutlichen.
Erstellt dafür zunächst ein neues Projekt, ob Forms oder Consolenanwendung ist egal. Wechselt dann in die Codeansicht.

user32.dll einbinden: 
[DllImport("user32.dll")]

Danach müssen wir das externe globale mouse_event deklarieren um den globalen Hook ansprechen zu können.
Bitte achtet darauf, dass die richtige Signatur verwendet wird. 

Globaler MouseEvent Hook 

 static extern void mouse_event(int dwFlags, int dx, int dy,
                                int dwData, int dwExtraInfo);
Zur Vereinfachung und zur besseren Übersicht erstellen wir eine Enumeration, die die Speicheradressen für die jeweilige Mausaktion beinhalten.

Enumeration für Mausaktionen

public enum MouseActionAdresses
 {
   LEFTDOWN = 0x00000002,
   LEFTUP = 0x00000004,
   MIDDLEDOWN = 0x00000020,
   MIDDLEUP = 0x00000040,
   MOVE = 0x00000001,
   ABSOLUTE = 0x00008000,
   RIGHTDOWN = 0x00000008,
   RIGHTUP = 0x00000010
 }
Nun erstellen wir eine Funktion die einen Klick mit übergebener Koordinate simuliert.

Funktion LeftClick zum Simulieren eines Linksklicks

 public void LeftClick(int x, int y)
 {
   Cursor.Position = new System.Drawing.Point(x, y);
   mouse_event((int)(MouseActionAdresses.LEFTDOWN), 0, 0, 0, 0);
   mouse_event((int)(MouseActionAdresses.LEFTUP), 0, 0, 0, 0);
 }
Wie ihr seht wird in dieser Funktion die Maus Curserposition auf die übergebenen XY Koordinaten gesetzt und anschliessend ein LEFTDOWN und direkt danach ein LEFTUP der Maus Simuliert. Das ergibt einen Mausklick.

Um das ganze zu Testen habe ich einfach im Form Load Ereignis eine Schleiffe gebastelt die immer an einer neuen Position in einem abstand von 2 Sekungen einen Mausklick simuliert.

Form Load Ereignis

private void Form1_Load(object sender, EventArgs e)
 {
   for (int i = 1; i <= 10; i++)
   {
     LeftClick(i * 50, i * 50);
     System.Threading.Thread.Sleep(2000);
   }
 }
 Dieses Tutorial könnte ebenfalls für Sie interessant sein: [C#] Tastendruck simulieren (Spezialtasten)

 

    Veröffentlichen Sie ihre Kommentare ...