如何模拟鼠标点击?

时间:2013-07-01 21:51:44

标签: vb.net

我试图使用Osu!中的键盘点击程序。 我尝试过SendKeys()RaiseMouseEvent()和OnMouseClick()。现在我尝试这个并且无法完成任何工作...... 我一直得到的错误是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

3 个答案:

答案 0 :(得分:4)

当功能处于“onn”状态时,此示例单击鼠标当前所在的位置:

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

尝试使用PerformClick()方法:

Button1.PerformClick()

在您的代码中,它可能是:

If onn And (e.KeyChar = "Z" Or e.KeyChar = "X" Or e.KeyChar = "z" Or e.KeyChar = "x") Then

    Button1.PerformClick()
End If