События мыши в vb.net

#vb.net #mouseevent

#vb.net #mouseevent

Вопрос:

Я пытаюсь переместить мышь, пока активировано стороннее приложение (вне моего контроля) (самая верхняя программа). В идеале я хочу переместить мышь относительно моей текущей позиции, но преобразовать в абсолютные позиции было бы несложно. Вот что я в настоящее время использую;

 <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 = amp;H1
  

Вызывается с;

  MoveMouse(100, 100)
  

Теперь моя проблема в том, что моя мышь перемещается в y, но не в x. Я попытался устранить некоторые неполадки, и оказалось, что первое значение в вызове (xPos) на самом деле является расстоянием, пройденным в y, а не x. yPos ничего не делает.
Например, приведенный ниже код перемещает мышь вниз на 50 пикселей;

  MoveMouse(50, 0)
  

Что я делаю не так?

Комментарии:

1. Введите свое определение MOUSEEVENTF_MOVE .

2. @Aybe woopse.. Спасибо! Теперь я добавил это к вопросу.

3. Сработало для меня. Хотя xPos и Ypos должны быть объявлены как UInt32 .

Ответ №1:

Должно быть, с вашей стороны что-то не так, потому что следующий код действительно работает:

 Imports System.Runtime.InteropServices

Public Class Form1
    Public Const MOUSEEVENTF_MOVE = amp;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 , поскольку вы не можете легко получить unchecked эквивалент C #, не указав /removeintchecks опцию.

Посмотрите, не мешает ли вам какая-либо программа, закрыв их и попробовав еще раз, если нет, то, боюсь, я не могу предложить другое исправление.

Комментарии:

1. Оказывается, я дважды объявлял mouse_event. Спасибо за помощь!