4

マウス カーソルの位置に影響を与えることなく、マウス クリックを画面上の特定の位置に送信しようとしています。

私は精査し、太陽の下ですべてをmouse_eventで試しました(これはこれを行うことになっています)

mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0);

ただし、これは、マウスの位置がどこであってもマウスクリックを送信するだけになります。そのため、マウスを動かして動作させる必要があります。

Cursor.Position = new Point(X, Y);

マウスを動かさずにこれを行う方法を知っている人はいますか? また、次のコードブロックを試しましたが、成功しなかったため、マウスカーソルの位置をクリックしただけで、これがうまくいくと思ったのでループに陥りました...

        Cursor.Position = new Point(X, Y);
        mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
        Cursor.Position = new Point(oldX, oldY);

助けてくれてありがとう!

4

4 に答える 4

1

MOUSEEVENTF_MOVE フラグを含めていないため、カーソルは移動しません。

3 つの異なる呼び出し (move、down、up) を行うことをお勧めします。すべてを同時に行うのは難しいです。しかし、うまくいくかもしれません。本当にそれを減らしたい場合は、実験してください。ところで、SendInput は、SDK が使用を推奨しているものです。

于 2010-11-17T14:27:21.967 に答える
0

マウスの現在の位置をキャプチャして、クリックしたい場所にマウスを移動し、その場所をクリックしてから、マウスを元に戻すことができます。これが十分に速く行われると、マウスが動かないように見えます。

于 2011-12-02T08:42:24.873 に答える
0

マウス クリックを間違った場所に送信している可能性があります。こちらmouse_eventのドキュメントで説明されているように、mickeys の X 値と Y 値を取ります。

次のような方法で場所を変換してみてください。

private static Point ScreenLocationToMickeyLocation( Point mouseLocation )
{
    Rectangle virtualScreen = SystemInformation.VirtualScreen;

    return new Point(
        ( ( mouseLocation.X - virtualScreen.X ) * 65535 ) / virtualScreen.Width,
        ( ( mouseLocation.Y - virtualScreen.Y ) * 65535 ) / virtualScreen.Height );
}
于 2010-11-17T14:25:40.300 に答える
0

Visual Basic 2015 コミュニティ宣言

System.Runtime.InteropServices をインポートします

<Flags()>
Public Enum MouseEventFlags As UInteger
    MOUSEEVENTF_ABSOLUTE = &H8000
    MOUSEEVENTF_LEFTDOWN = &H2
    MOUSEEVENTF_LEFTUP = &H4
    MOUSEEVENTF_MIDDLEDOWN = &H20
    MOUSEEVENTF_MIDDLEUP = &H40
    MOUSEEVENTF_MOVE = &H1
    MOUSEEVENTF_RIGHTDOWN = &H8
    MOUSEEVENTF_RIGHTUP = &H10
    MOUSEEVENTF_XDOWN = &H80
    MOUSEEVENTF_XUP = &H100
    MOUSEEVENTF_WHEEL = &H800
    MOUSEEVENTF_HWHEEL = &H1000
End Enum

Dim pntapi As POINTAPI
Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (ByRef lpPoint As POINTAPI) As Integer
Declare Function SetCursorPos Lib "user32" Alias "SetCursorPos" (ByVal X As Integer, ByVal Y As Integer) As Integer
Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal dwData As Integer, ByVal dwExtraInfo As Integer)
于 2016-05-03T17:45:33.883 に答える