Как имитировать события мыши (Windows Forms .NET)
Имитация событий мыши в Windows Forms не так проста, как имитация событий клавиатуры. В Windows Forms отсутствует вспомогательный класс для перемещения мыши и вызова действий щелчка мышью. Единственным вариантом управления мышью является использование собственных методов Windows. При работе с пользовательским элементом управления или формой можно имитировать событие мыши, но нельзя напрямую управлять мышью.
События
У большинства событий есть соответствующий метод, который их вызывает, с шаблонным именем, начинающимся с On
, за которым следует EventName
, например OnMouseMove
. Этот вариант возможен только в пределах пользовательских элементов управления или форм, так как эти методы защищены и недоступны вне контекста элемента управления или формы. Недостаток использования такого метода, как OnMouseMove
, заключается в том, что он не управляет мышью или взаимодействует с элементом управления, а просто вызывает связанное событие. Например, если вы хотите имитировать наведение указателя мыши на элемент в ListBox, OnMouseMove
и ListBox
не будут визуально реагировать на выделенный элемент под курсором.
Эти защищенные методы можно использовать для имитации событий мыши.
OnMouseDown
OnMouseEnter
OnMouseHover
OnMouseLeave
OnMouseMove
OnMouseUp
OnMouseWheel
OnMouseClick
OnMouseDoubleClick
Дополнительные сведения об этих событиях см. в разделе Использование событий мыши (Windows Forms .NET).
Вызов щелчка мышью
Большинство элементов управления при щелчке мышью выполняют какое-либо действие, например вызов пользовательского кода при нажатии кнопки или изменение состояния флажка после его установки. Поэтому в Windows Forms предусмотрен простой способ запуска действия щелчка мышью. Некоторые элементы управления, такие как ComboBox, не выполняют никаких специальных действий при щелчке мышью, а имитация щелчка не влияет на элемент управления.
PerformClick
Интерфейс System.Windows.Forms.IButtonControl предоставляет метод PerformClick, который имитирует щелчок элемента управления. Этот интерфейс реализуется как элементом управления System.Windows.Forms.Button, так и элементом управления System.Windows.Forms.LinkLabel.
button1.PerformClick();
Button1.PerformClick()
InvokeClick
В форме с пользовательским элементом управления используйте метод InvokeOnClick для имитации щелчка мышью. Это защищенный метод, который может вызываться только в форме или в производном пользовательском элементе управления.
Например, ниже представлен код установки флажка в button1
.
private void button1_Click(object sender, EventArgs e)
{
InvokeOnClick(checkBox1, EventArgs.Empty);
}
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
InvokeOnClick(CheckBox1, EventArgs.Empty)
End Sub
Использование собственных методов Windows
Windows предоставляет методы, которые можно вызывать для имитации движений мыши и щелчков мышью, такие как User32.dll SendInput
и User32.dll SetCursorPos
. В следующем примере курсор мыши перемещается в центр элемента управления:
[DllImport("user32.dll", EntryPoint = "SetCursorPos")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool SetCursorPos(int x, int y);
private void button1_Click(object sender, EventArgs e)
{
Point position = PointToScreen(checkBox1.Location) + new Size(checkBox1.Width / 2, checkBox1.Height / 2);
SetCursorPos(position.X, position.Y);
}
<Runtime.InteropServices.DllImport("USER32.DLL", EntryPoint:="SetCursorPos")>
Public Shared Function SetCursorPos(x As Integer, y As Integer) As Boolean : End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim position As Point = PointToScreen(CheckBox1.Location) + New Size(CheckBox1.Width / 2, CheckBox1.Height / 2)
SetCursorPos(position.X, position.Y)
End Sub
См. также
.NET Desktop feedback