2016-10-20 3 views
0

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

<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) 

Что я делаю неправильно?

+0

Поместите свое определение 'MOUSEEVENTF_MOVE'. – Aybe

+0

@Aybe woopse .. спасибо! Я добавил его к вопросу сейчас. – FraserOfSmeg

+0

Работал для меня. Хотя, xPos и ​​Ypos должны быть объявлены как 'UInt32'. –

ответ

0

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

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, так как вы не можете легко иметь C# unchecked эквивалента без укажите /removeintchecks option.

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

+0

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

+0

Вы приветствуете !!! – Aybe

Смежные вопросы