C # симуляция щелчка мышью не работает в веб-браузере (Chrome) - PullRequest
0 голосов
/ 02 августа 2011

У меня проблема с симуляцией щелчка мыши.

Мой код выглядит так:

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 #.

...