У меня проблема с симуляцией щелчка мыши.
Мой код выглядит так:
private const UInt32 MOUSEEVENTF_LEFTDOWN = 0x0002;
private const UInt32 MOUSEEVENTF_LEFTUP = 0x0004;
[DllImport("user32.dll")]
private static extern void mouse_event(UInt32 dwFlags, UInt32 dx, UInt32 dy, UInt32 dwData, IntPtr dwExtraInfo);
[DllImport("user32.dll")]
static extern bool SetCursorPos(int X, int Y);
public static void LinearSmoothMove(Point newPosition, TimeSpan duration)
{
Point start = Cursor.Position;
int sleep = 10;
double deltaX = newPosition.X - start.X;
double deltaY = newPosition.Y - start.Y;
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
double timeFraction = 0.0;
do
{
timeFraction = (double)stopwatch.Elapsed.Ticks / duration.Ticks;
if (timeFraction > 1.0) timeFraction = 1.0;
PointF curPoint = new PointF((float)(start.X + timeFraction * deltaX), (float)(start.Y + timeFraction * deltaY));
SetCursorPos(Point.Round(curPoint).X, Point.Round(curPoint).Y);
Thread.Sleep(sleep);
}
while (timeFraction < 1.0);
}
public static void SendClick(Point location)
{
LinearSmoothMove(location, new TimeSpan(0, 0, 0, 5, 0)); // 5 sec for smooth move
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, new IntPtr());
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, new IntPtr());
}
Теперь, когда я вызываю функцию отправки:
SendClick(new Point(5,5));
курсор начинает плавно перемещаться в положение 5,5 и щелкает, затем открывается меню окна (в левом верхнем углу обычно есть маленькая иконка окна, которая появляется в контекстном меню окна). Пока все хорошо - все работает.
Теперь проблема заключается в нажатии на ссылки и другие элементы в веб-браузере (я использую Chrome).
Например, если я позвоню:
SendClick(new Point(300,400));
Курсор перемещается в эту позицию, я вижу, что он находится над ссылкой (внизу хром показывает источник ссылки), но ничего не происходит, щелчок не срабатывает.
Как смоделировать нажатие кнопки мыши в веб-браузере?
Я думал о сценариях chrome для использования jQuery .click () для указания идентификатора div, но я хочу сделать это в C #.