2016-10-20 5 views
0

Ich versuche, die Maus zu bewegen, während eine Drittanbieter-Anwendung (außerhalb meiner Kontrolle) aktiviert ist (das oberste Programm). Idealerweise möchte ich die Maus relativ zu meiner aktuellen Position bewegen, aber die Verwendung absoluter Positionen wäre nicht schwer zu konvertieren. Hier ist, was ich derzeit verwende;Maus Ereignisse in 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 

Es heißt mit;

MoveMouse(100, 100) 

Nun mein Problem ist meine Maus bewegt sich in y, aber nicht in x. Ich habe versucht, einige Fehlersuche und es stellt sich heraus, der erste Wert in dem Aufruf (xPos) ist eigentlich die Entfernung in y bewegt, nicht x. Das YPos macht nichts. Zum Beispiel bewegt der untere Code die Maus um 50 Pixel nach unten;

MoveMouse(50, 0) 

Was mache ich falsch?

+0

Setzen Sie Ihre Definition von 'MOUSEEVENTF_MOVE'. – Aybe

+0

@Aybe woopse .. danke! Ich habe es jetzt zur Frage hinzugefügt. – FraserOfSmeg

+0

Arbeitete für mich. Allerdings sollten xPos und Ypos als "UInt32" deklariert werden. –

Antwort

0

Etwas muss auf Ihrer Seite falsch sein, da der folgende Code funktioniert:

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 

Bitte beachte, dass ich leicht die Unterschrift von mouse_event modifizierten Integer zu verwenden, da man nicht einfach eine C# unchecked äquivalent ohne zu haben, hat Spezifizieren Sie die /removeintchecks option.

Sehen Sie, ob es ein Programm gibt, das sich auf Ihr Programm auswirkt, indem Sie es schließen und es erneut versuchen. Wenn nicht, dann kann ich leider nichts anderes vorschlagen.

+0

Stellt sich heraus, dass ich das mouse_event zweimal deklarierte. Danke für die Hilfe! – FraserOfSmeg

+0

Sie begrüßen !!! – Aybe

Verwandte Themen