我希望将鼠标点击发送到屏幕上的特定位置,而不会影响鼠标光标的位置。
我已经在使用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);
提前感谢您的帮助!
答案 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)