发送鼠标单击到特定位置而不移动鼠标

时间:2010-11-17 13:00:54

标签: .net events mouse click simulate

我希望将鼠标点击发送到屏幕上的特定位置,而不会影响鼠标光标的位置。

我已经在使用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 个答案:

答案 0 :(得分:1)

您没有包含MOUSEEVENTF_MOVE标志,因此光标不会移动。

我建议进行3次不同的调用(移动,向下,向上),同时执行所有操作都是不确定的。但是可能有效,如果你真的想减少它,就要进行实验。顺便说一句,SendInput是SDK建议你使用的。

答案 1 :(得分:0)

您可能将鼠标点击发送到错误的位置。 mouse_event获取mickeys中的X和Y值,如文档here中所述。

尝试使用以下内容转换您的位置:

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

visual basic 2015社区宣言

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