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

You didn't include the MOUSEEVENTF_MOVE flag, so the cursor isn't going to move.

I would recommend making 3 distinct calls (move, down, up), doing everything at the same time is iffy. But might work, experiment if you really want to cut that down. Btw, SendInput is what the SDK recommends you use.

于 2010-11-17T14:27:21.967 回答
0

You're probably sending the mouse click to the wrong location. mouse_event takes the X and Y values in mickeys, as described in the documentation here.

Try converting your location with something like this:

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

您可能想尝试捕获鼠标的当前位置,将鼠标移动到您想要单击的位置,单击该位置,然后将鼠标移回。如果这完成得足够快,它看起来就像鼠标没有移动。

于 2011-12-02T08:42:24.873 回答
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 回答