【问题标题】:Mouse Events in vb.netvb.net 中的鼠标事件
【发布时间】:2016-10-20 21:37:29
【问题描述】:

我正在尝试在第 3 方应用程序(不受我控制)被激活(最顶层的程序)时移动鼠标。理想情况下,我想相对于当前位置移动鼠标,但使用绝对位置并不难转换。这是我目前使用的;

<DllImport("user32.dll")> _
Private Shared Sub mouse_event(dwFlags As UInteger, dx As UInteger, dy As UInteger, dwData As UInteger, dwExtraInfo As Integer)
End Sub

Public Sub MoveMouse(ByVal xPos As Long, ByVal yPos As Long)
    mouse_event(MOUSEEVENTF_MOVE, xPos, yPos, 0, 0)
End Sub

Public Const MOUSEEVENTF_MOVE = &H1

它被称为;

 MoveMouse(100, 100)

现在我的问题是我的鼠标在 y 中移动,但在 x 中没有。我尝试了一些故障排除,结果发现调用中的第一个值 (xPos) 实际上是在 y 中移动的距离,而不是 x。 yPos 不做任何事情。 例如下面的代码将鼠标向下移动 50 像素;

 MoveMouse(50, 0)

我做错了什么?

【问题讨论】:

  • 把你定义的MOUSEEVENTF_MOVE.
  • @Aybe woopse.. 谢谢!我现在已将其添加到问题中。
  • 为我工作。虽然,xPos 和 Ypos 应该声明为UInt32

标签: vb.net mouseevent


【解决方案1】:

您一定有问题,因为以下代码确实有效:

Imports System.Runtime.InteropServices

Public Class Form1
    Public Const MOUSEEVENTF_MOVE = &H1

    <DllImport("user32.dll", EntryPoint:="mouse_event")>
    Private Shared Sub mouse_event(dwFlags As UInteger, dx As Integer, dy As Integer, dwData As UInteger,
                                   dwExtraInfo As Integer)
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim dx = -10
        Dim dy = -10
        mouse_event(MOUSEEVENTF_MOVE, dx, dy, 0, 0)
    End Sub
End Class

请注意,我稍微修改了mouse_event 的签名以使用Integer,因为如果不指定/removeintchecks option,您将无法轻松获得等效的C# unchecked

关闭它们并重试,看看是否有程序干扰你的程序,如果没有,恐怕我无法建议其他修复方法。

【讨论】:

  • 原来我两次声明了 mouse_event。感谢您的帮助!
猜你喜欢
  • 2016-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
  • 2018-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多