#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. Спасибо за помощь!