2016-10-20 5 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)は実際にxではなくyで移動した距離です。 yPosは何もしません。 たとえば、次のコードはマウスを50ピクセル下に移動します。

MoveMouse(50, 0) 

私は間違っていますか?次のコードは、作業を行うため

+0

「MOUSEEVENTF_MOVE」の定義を入れてください。 – Aybe

+0

@Aybe woopse ..ありがとう!私は今質問にそれを加えました。 – FraserOfSmeg

+0

私のために働いた。ただし、xPosとYposは 'UInt32'として宣言する必要があります。 –

答えて

0

何かがあなたの側で間違っている必要があります:あなたは簡単にすることなく、同等のC#uncheckedを持つことはできませんので、私は少し、Integerを使用するmouse_eventの署名を変更

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 

注意/removeintchecks optionを指定します。

あなたのプログラムを閉じて再試行するプログラムがあるかどうかを確認してください。そうでなければ、私は別の修正について提案することはできません。

+0

私はmouse_eventを2回宣言しました。助けてくれてありがとう! – FraserOfSmeg

+0

あなたは歓迎!!! – Aybe

関連する問題