How to simulate mouse click?

22,413

Solution 1

This examples clicks where the mouse currently is when the feature is in the "onn" state:

Public Class Form1

    Private onn As Boolean = False

    Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Integer, _
      ByVal dx As Integer, ByVal dy As Integer, ByVal cButtons As Integer, _
      ByVal dwExtraInfo As Integer)

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Me.KeyPreview = True
        Button1.Text = "Off"
    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        onn = Not onn
        Button1.Text = IIf(onn, "On", "Off")
    End Sub

    Private Sub Form1_KeyPress1(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
        If onn Then
            Select Case e.KeyChar
                Case "Z", "z", "X", "x"
                    mouse_event(&H2, 0, 0, 0, 0)
                    mouse_event(&H4, 0, 0, 0, 0)

            End Select
        End If
    End Sub

    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        Debug.Print("Button2")
    End Sub

    Private Sub Button3_Click(sender As Object, e As System.EventArgs) Handles Button3.Click
        Debug.Print("Button3")
    End Sub

End Class

Solution 2

Public Class Iconform

  Public Declare Auto Function SetCursorPos Lib "User32.dll" (ByVal X As Integer, ByVal Y As Integer) As Long

  Public Declare Auto Function GetCursorPos Lib "User32.dll" (ByRef lpPoint As Point) As Long

  Public Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)

  Public Const MOUSEEVENTF_LEFTDOWN = &H2 ' left button down

  Public Const MOUSEEVENTF_LEFTUP = &H4 ' left button up

  Public Const MOUSEEVENTF_MIDDLEDOWN = &H20 ' middle button down

  Public Const MOUSEEVENTF_MIDDLEUP = &H40 ' middle button up

  Public Const MOUSEEVENTF_RIGHTDOWN = &H8 ' right button down

  Public Const MOUSEEVENTF_RIGHTUP = &H10 ' right button up



  Private Sub NotifyIcon1_MouseDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.Click

    SettingsForm.Show()



  End Sub



  Private Sub OptionsToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OptionsToolStripMenuItem.Click

    SettingsForm.Show()

  End Sub



  Private Sub CloseToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CloseToolStripMenuItem.Click

    Me.Close()



  End Sub

  Private Sub Form1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown

    Dim bHandled As Boolean = False

    Dim xPos As Integer = Windows.Forms.Cursor.Position.X.ToString

    Dim zPos As Integer = Windows.Forms.Cursor.Position.Y.ToString



    Select Case e.KeyCode

      Case Keys.Right

        Windows.Forms.Cursor.Position = New Point(xPos + 10, zPos)

      Case Keys.Left

        Windows.Forms.Cursor.Position = New Point(xPos - 10, zPos)

      Case Keys.Down

        Windows.Forms.Cursor.Position = New Point(xPos, zPos + 10)

      Case Keys.Up

        Windows.Forms.Cursor.Position = New Point(xPos, zPos - 10)

      Case Keys.D

        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)







    End Select

  End Sub

End Class
Share:
22,413
Devonx25
Author by

Devonx25

Updated on November 20, 2020

Comments

  • Devonx25
    Devonx25 over 3 years

    I'm trying to make a program to click with keyboard like in Osu!.

    I've tried SendKeys(), RaiseMouseEvent() and OnMouseClick(). Now I'm trying this and can't get anything to work.

    The error I keep getting is:

    PInvoke restriction: cannot return variants.

    Public Class Form1
        Dim onn As Boolean = False
        Declare Function mc Lib "user32.dll" Alias "mouse_event" (flag, x, y, button, extra)
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            If Not onn Then
                Button1.Text = "Off"
                Label1.Text = "Status: On"
                onn = True
            ElseIf onn Then
                Button1.Text = "On"
                Label1.Text = "Status: Off"
                onn = False
            End If
        End Sub
        Private Sub Form1_KeyPress1(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
            If onn And (e.KeyChar = "Z" Or e.KeyChar = "X" Or e.KeyChar = "z" Or e.KeyChar = "x") Then
                mc(&H2, 0, 0, 0, 0)
                mc(&H4, 0, 0, 0, 0)
            End If
        End Sub
    End Class