单击鼠标事件后出现奇怪的鼠标行为

时间:2014-06-10 10:00:12

标签: vb.net mouseevent

我正在使用Vb2010和Windows 7 我试图创建一个点击其他进程的程序,但我在左右点击事件上遇到了一些麻烦。
事实上,当我向右然后左键单击时,鼠标会表现得很奇怪:左右点击似乎会交换,因为左键单击将打开菜单,右键单击将不执行任何操作。
使其恢复正常的唯一方法是物理上正确然后左键单击,但我需要程序自动执行此操作。有任何修复或解决方法吗?感谢。

要重新创建此问题,您可以在vb.net中创建一个带有button1的表单并粘贴此代码(然后运行调试并单击按钮),或者您可以从here下载已编译的程序

Public Class Form1
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 Const mouseclickdown = 2
Private Const mouseclickup = 4
Private Const rightclickdown = 8
Private Const rightclickup = 10

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    System.Threading.Thread.Sleep(200)
    Cursor.Position = New Point(650, 350)
    System.Threading.Thread.Sleep(200)
    mouse_event(rightclickdown, 0, 0, 0, 0)
    System.Threading.Thread.Sleep(200)
    mouse_event(rightclickup, 0, 0, 0, 0)
    System.Threading.Thread.Sleep(200)
    Cursor.Position = New Point(500, 200)
    System.Threading.Thread.Sleep(200)
    mouse_event(mouseclickdown, 0, 0, 0, 0)
    System.Threading.Thread.Sleep(200)
    mouse_event(mouseclickup, 0, 0, 0, 0)
    System.Threading.Thread.Sleep(200)
End Sub
End Class

1 个答案:

答案 0 :(得分:0)

rightclickup的值应为0x0010(来源:http://msdn.microsoft.com/en-us/library/windows/desktop/ms646260(v=vs.85).aspx),十六进制为10。在十进制中,它是16。

Public Class Form1
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 Const mouseclickdown = 2
Private Const mouseclickup = 4
Private Const rightclickdown = 8
Private Const rightclickup = 16

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    System.Threading.Thread.Sleep(200)
    Cursor.Position = New Point(650, 350)
    System.Threading.Thread.Sleep(200)
    mouse_event(rightclickdown, 0, 0, 0, 0)
    System.Threading.Thread.Sleep(200)
    mouse_event(rightclickup, 0, 0, 0, 0)
    System.Threading.Thread.Sleep(200)
    Cursor.Position = New Point(500, 200)
    System.Threading.Thread.Sleep(200)
    mouse_event(mouseclickdown, 0, 0, 0, 0)
    System.Threading.Thread.Sleep(200)
    mouse_event(mouseclickup, 0, 0, 0, 0)
    System.Threading.Thread.Sleep(200)
End Sub
End Class