Mausklickereignisse in C# simulieren

Naila Saad Siddiqui 15 Februar 2024
  1. Mausereignisse in C#
  2. Mausereignisse simulieren in C#
Mausklickereignisse in C# simulieren

In diesem kurzen Artikel geht es um die Simulation von Mausklickereignissen in C#. Wir werden einige der in C#-Bibliotheken verfügbaren Methoden erörtern, die uns helfen, das Mausklickereignis zu simulieren.

Das Simulieren von Mausereignissen bedeutet, einen Code zu schreiben, der die Mausbewegungen steuern oder das Mausklickereignis auslösen kann, das wiederum die entsprechenden Mausereignishandler auslösen kann. Wir können native Windows-Funktionalitäten zum Manipulieren der Maus verwenden (d. h. die Cursorbewegungen und Klicks simulieren).

Lassen Sie uns zunächst diskutieren, was die Mausereignisse sind und warum diese nicht zur Simulation der Ereignisse verwendet werden können.

Mausereignisse in C#

Die meisten Ereignisse haben eine entsprechende Behandlungsmethode, die bestimmte Codeteile ausführt, wenn diese Ereignisse auftreten. Diese Methoden haben normalerweise das Format On gefolgt von EventName, z. B. OnMouseMove.

Aufgrund der geschützten Natur dieser Methoden, die den Zugriff von außerhalb des Kontexts des Steuerelements oder Formulars verhindern, ist diese Option nur innerhalb benutzerdefinierter Steuerelemente oder Formulare verfügbar.

Diese Methoden sind nur Ereignisbehandler (z. B. OnMouseMove) und werden ausgeführt, wenn das entsprechende Ereignis eintritt. Diese Methoden steuern die Ereignisse nicht.

Beispielsweise macht die Methode OnMouseMove etwas mit der Bewegung des Cursors, kann aber den Cursor selbst nicht steuern.

Die Liste der verfügbaren Ereignishandler, die zugehörige Routinen/Aktionen ausführen, wenn ein bestimmtes Mausereignis eintritt, lautet wie folgt:

  • OnMouseDown
  • OnMouseEnter
  • OnMouseHover
  • OnMouseLeave
  • OnMouseMove
  • OnMouseUp
  • OnMouseWheel
  • OnMouseClick
  • OnMouseDoubleClick

Wie in diesem Abschnitt besprochen, können Ereignishandler nicht zum Simulieren von Ereignissen verwendet werden. Es stehen jedoch einige andere betriebssystemeigene Methoden zur Verfügung, um die Ereignisse zu simulieren.

Lassen Sie uns sie im folgenden Abschnitt untersuchen.

Mausereignisse simulieren in C#

Windows Forms bietet einfache Methoden zum Auslösen des Klicks, da die meisten Steuerelemente einige klickbezogene Aktionen haben, z. B. eine Schaltfläche, die Benutzercode ausführt, oder ein Kontrollkästchen, das seinen aktivierten Zustand ändert. Die Comboboxen sind eine Art von Steuerelementen, die nicht reagieren, wenn sie angeklickt werden, und die Simulation eines Klicks hat keinen Einfluss auf das Steuerelement.

die PerformClick()-Methode

Microsofts System.Windows.Forms.IButtonControl bietet die PerformClick-Methode, die über die IButtonControl-Schnittstelle verfügbar ist, und simuliert einen Klick auf ein Formularsteuerelement. Alle Steuerelemente implementieren diese Schnittstelle, einschließlich System.Windows.Forms.Button.

Im folgenden Beispiel haben wir eine Windows Form-Anwendung erstellt. Das Formular enthält zwei Schaltflächen. Beim Klick auf den ersten Button können wir auch den Klick auf den zweiten Button mit der Methode PerformClick ausführen.

Die Schnittstelle dieses Codierungsbeispiels sieht folgendermaßen aus:

performClick Beispielschnittstelle

Die entsprechenden Handler-Funktionen für diese Schaltflächen mit den Namen button1 und button2, lauten wie folgt:

private void button1_Click(object sender, EventArgs e) {
  button2.PerformClick();
}
private void button2_Click(object sender, EventArgs e) {
  MessageBox.Show("Button 2 Clicked!!");
}

Im obigen Code sehen Sie, dass wir die Methode button2.PerformClick() im Eventhandler von button1 aufgerufen haben. Dadurch wird der Click-Event-Handler für button2 aufgerufen und schließlich die Message Box angezeigt, die in der Handler-Funktion von button2 codiert ist.

PerformClick-Beispielausgabe

Aufrufen von Click for Checkbox und Handle Mouse Movements

Verwenden Sie die Funktion InvokeOnClick, um einen Mausklick mit dem benutzerdefinierten Steuerelement eines Formulars zu simulieren. Diese Methode ist geschützt und kann nur vom Formular oder abgeleiteten benutzerdefinierten Steuerelement verwendet werden.

Der folgende Code wählt beispielsweise ein Kontrollkästchen aus, wenn auf die Schaltfläche geklickt wird. Die Oberfläche des Beispiels enthält zwei Kontrollkästchen und die dazugehörigen zwei Schaltflächen.

Oben befindet sich ein label mit der obersten Überschrift und unten ein button zur Simulation der Mausbewegung. Diese Schnittstelle ist unten dargestellt:

InvokeOnClick-Oberfläche

Die Event-Handler-Funktionen für die beiden Schaltflächen sind:

private void button1_Click(object sender, EventArgs e) {
  InvokeOnClick(checkBox1, EventArgs.Empty);
}
private void button2_Click(object sender, EventArgs e) {
  InvokeOnClick(checkBox2, EventArgs.Empty);
}

Native Windows-Methoden zum Bewegen des Cursors

Das Windows-Betriebssystem bietet einige native Methoden zur Steuerung von Mausbewegungen und Tastaturereignissen. Für dieses Beispiel werden wir nur die Funktionen zum Steuern von Mausbewegungen und zum Ändern der Cursorposition diskutieren und demonstrieren.

Im obigen Beispiel sagt eine nicht funktionierende Schaltfläche unten: Click me to Move Mouse Point to Heading. Diese Schaltfläche wird hinzugefügt, um die Cursorposition in Richtung der obersten Überschrift zu verschieben: Mouse Simulation Demo.

Lassen Sie uns diese Schaltfläche funktionsfähig machen.

Die user32.dll stellt die SetCursorPos-API bereit, die im Namensraum System.Runtime.InteropServices definiert ist. Diese Methode ruft native Windows-Prozeduren auf und muss als externe Methode definiert werden.

Der folgende Code setzt die Cursorposition:

[DllImport("user32.dll", EntryPoint = "SetCursorPos")]
[return:MarshalAs(UnmanagedType.Bool)]
private static extern bool SetCursorPos(int x, int y);

private void button3_Click(object sender, EventArgs e) {
  Point position = PointToScreen(label1.Location) + new Size(label1.Width / 2, label1.Height / 2);
  SetCursorPos(position.X, position.Y);
}

Wir haben ein Punkt-Objekt erstellt, um die Position des Etiketts oben zu erhalten, die Punkte hinzugefügt, um den Mittelpunkt des Etiketts zu erhalten, und dann seine Koordinaten an die Funktion SetCursorPos übergeben.

Der vollständige Code für dieses Beispiel lautet:

using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace WinFormsApp2 {
  public partial class Form1 : Form {
    [DllImport("user32.dll", EntryPoint = "SetCursorPos")]
    [return:MarshalAs(UnmanagedType.Bool)]
    private static extern bool SetCursorPos(int x, int y);
    public Form1() {
      InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e) {
      InvokeOnClick(checkBox1, EventArgs.Empty);
    }
    private void button2_Click(object sender, EventArgs e) {
      InvokeOnClick(checkBox2, EventArgs.Empty);
    }

    private void button3_Click(object sender, EventArgs e) {
      Point position =
          PointToScreen(label1.Location) + new Size(label1.Width / 2, label1.Height / 2);
      SetCursorPos(position.X, position.Y);
    }
  }
}

Die Ausgabe dieser Maussimulation ist im Bild unten dargestellt:

Ausgabe der Maussimulation

Verwandter Artikel - Csharp Mouse