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 On
EventName
, 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
.NET Desktop feedback
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de