Como simular eventos de mouse (Windows Forms .NET)

Simular eventos de mouse no Windows Forms não é tão simples quanto simular eventos de teclado. O Windows Forms não fornece uma classe auxiliar para mover o mouse e invocar ações de clique do mouse. A única opção para controlar o mouse é usar métodos nativos do Windows. Se você estiver trabalhando com um controle personalizado ou um formulário, poderá simular um evento do mouse, mas não poderá controlar diretamente o mouse.

Importante

A documentação do Guia da Área de Trabalho para .NET 7 e .NET 6 está em construção.

Eventos

A maioria dos eventos tem um método correspondente que os invoca, nomeado no padrão de seguido por OnEventName, como OnMouseMove. Essa opção só é possível dentro de controles ou formulários personalizados, porque esses métodos são protegidos e não podem ser acessados de fora do contexto do controle ou formulário. A desvantagem de usar um método como OnMouseMove é que ele não controla o mouse ou interage com o controle, ele simplesmente gera o evento associado. Por exemplo, se você quiser simular passar o mouse sobre um item em um , OnMouseMove e o não reagir visualmente com um ListBoxitem realçado sob o ListBox cursor.

Esses métodos protegidos estão disponíveis para simular eventos de mouse.

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

Para obter mais informações sobre esses eventos, consulte Usando eventos de mouse (Windows Forms .NET)

Invocar um clique

Considerando que a maioria dos controles faz algo quando clicado, como um botão chamando o código do usuário ou a caixa de seleção alterar seu estado marcado, o Windows Forms fornece uma maneira fácil de disparar o clique. Alguns controles, como uma caixa de combinação, não fazem nada de especial quando clicados e simular um clique não tem efeito sobre o controle.

ExecutarClique

A System.Windows.Forms.IButtonControl interface fornece o PerformClick método que simula um clique no controle. System.Windows.Forms.Button Os controles e System.Windows.Forms.LinkLabel implementam essa interface.

button1.PerformClick();
Button1.PerformClick()

InvokeClick

Com um formulário um controle personalizado, use o método para simular um clique do InvokeOnClick mouse. Esse é um método protegido que só pode ser chamado de dentro do formulário ou de um controle personalizado derivado.

Por exemplo, o código a seguir clica em uma caixa de seleção do 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

Usar métodos nativos do Windows

O Windows fornece métodos que você pode chamar para simular movimentos e cliques do mouse, como User32.dll SendInput e User32.dll SetCursorPos. O exemplo a seguir move o cursor do mouse para o centro de um controle:

[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

Confira também