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 de mouse, mas não poderá controlar diretamente o mouse.
Eventos
A maioria dos eventos tem um método correspondente que os invoca, nomeado no padrão de On
seguido por EventName
, como OnMouseMove
. Essa opção só é possível em controles ou formulários personalizados, pois 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 o mouse sobre um item em um ListBox, OnMouseMove
e o ListBox
não reagir visualmente com um item realçado sob o 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 clicada, como um botão chamando o código do usuário ou uma caixa de seleção que altera 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.
PerformClick
A System.Windows.Forms.IButtonControl interface fornece o PerformClick método que simula um clique no controle. Os controles e System.Windows.Forms.LinkLabel implementam System.Windows.Forms.Button essa interface.
button1.PerformClick();
Button1.PerformClick()
InvokeClick
Com um controle personalizado de formulário, 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 de 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
.NET Desktop feedback