//Ссылка на онлайн-документацию по объектной модели для всех версий ZennoPoster: //http://zennolab.com/wiki/en:zennoposter:macros-documentation
//Ссылка на онлайн-документацию по объектной модели версии 5.11.0.0: //https://help.zennolab.com/en/v5/zennoposter/5.11.0.0/
//public void MouseMove
//Предназначение метода: Выполнение события перемещения указателя мыши от точки к точке в определённых координатах в текущей вкладке.
//Параметры:
//Перегрузка метода №1:
// int fromX - Координата X стартовой точки внутри области вкладки для выполнения события mouse move.
// int fromY - Координата Y стартовой точки внутри области вкладки для выполнения события mouse move.
// int toX - Координата X конечной точки внутри области вкладки для выполнения события mouse move.
// int toY - Координата Y конечной точки внутри области вкладки для выполнения события mouse move.
// bool useClick - true если необходимо выполнить клик левой кнопкой мыши (left mouse click) в конечной точке: иначе false. Значение по умолчанию - это false.
// bool considerScroll - true если необходимо учитывать текущую позицию прокрутки браузера; иначе false. Значение по умолчанию это false.
//Перегрузка метода №2:
// int toX - Координата X конечной точки внутри области вкладки для выполнения события mouse move.
// int toY - Координата Y конечной точки внутри области вкладки для выполнения события mouse move.
// bool useClick - true если необходимо выполнить клик левой кнопкой мыши (left mouse click) в конечной точке: иначе false. Значение по умолчанию - это false.
// bool considerScroll - true если необходимо учитывать текущую позицию прокрутки браузера; иначе false. Значение по умолчанию это false.
//Перегрузка метода №3:
// Point[] points - массив точек, по которым должно идти последовательное перемещение указателя
// int[] delay - массив задержек (пауз) между перемещениями
// bool useClick - true если нужно выполнить клик в конечной точке перемещения, иначе и по умолчанию false.
// bool considerScroll - true если необходимо учитывать текущую позицию прокрутки браузера; иначе false. Значение по умолчанию это false.
//Демонстрация:
Tab Tab1 = instance.ActiveTab;
HtmlElement elSearchQuery;
HtmlElement elSearchButton;
Tab1.Navigate("https://ya.ru");
Tab1.WaitDownloading();
elSearchQuery = Tab1.FindElementByXPath("//div[starts-with(@class, 'search2')]/descendant::input", 0);
elSearchButton = Tab1.FindElementByXPath("//button[contains(@class, 'button_theme_websearch')]/span", 0);
Tab1.MouseMove(elSearchQuery.DisplacementInTabWindow.X+15, elSearchQuery.DisplacementInTabWindow.Y+15, true, false);
instance.SendText("Проверка", 125);
//первая перегрузка метода MouseMove
Tab1.MouseMove(elSearchQuery.DisplacementInTabWindow.X+45, elSearchQuery.DisplacementInTabWindow.Y+10,
elSearchButton.DisplacementInTabWindow.X+15, elSearchButton.DisplacementInTabWindow.Y+15, true, false);
Thread.Sleep(3000);
Tab1.Navigate("https://ya.ru");
Tab1.WaitDownloading();
elSearchQuery = Tab1.FindElementByXPath("//div[starts-with(@class, 'search2')]/descendant::input", 0);
elSearchButton = Tab1.FindElementByXPath("//button[contains(@class, 'button_theme_websearch')]/span", 0);
Tab1.MouseMove(elSearchQuery.DisplacementInTabWindow.X+15, elSearchQuery.DisplacementInTabWindow.Y+15, true, false);
instance.SendText("Проверка", 125);
//настройки для формирования массива точек
int intQXSteps = 100; //количество точек для движения мыши
int intYLatency = 5; //случайный сдвиг "плюс-минус" от прямой линии перемещения указателя мыши
int intPauseBase = 5;
int intPauseLatency = 3;
//формируем массив точек для движения указателя
Random rndGenerator = new Random();
Point ptFrom = new Point(elSearchQuery.DisplacementInTabWindow.X-10, elSearchQuery.DisplacementInTabWindow.Y+10);
Point ptTo = new Point(elSearchButton.DisplacementInTabWindow.X+10, elSearchButton.DisplacementInTabWindow.Y+5);
int intDeltaX = ptTo.X - ptFrom.X;
int intDeltaY = ptTo.Y - ptFrom.Y;
double dbXPerStep =intDeltaX/intQXSteps;
double dbYPerStep = intDeltaY/intDeltaX;
List<Point> lstPoints = new List<Point>();
List<int> lstDelays = new List<int>();
lstPoints.Add(ptFrom);
lstDelays.Add(intPauseBase);
for (int i=0; i<intQXSteps-1; i++){
int intNextX = ptFrom.X + (i * (int)Math.Round(dbXPerStep));
int intNexyYOnLine = ptFrom.Y + (i * (int)Math.Round(dbYPerStep));
int intNextY = rndGenerator.Next(intNexyYOnLine-intYLatency, intNexyYOnLine+intYLatency);
lstPoints.Add(new Point(intNextX, intNextY));
lstDelays.Add(rndGenerator.Next(intPauseBase-intPauseLatency, intPauseBase+intPauseLatency));
}
lstPoints.Add(ptTo);
lstDelays.Add(intPauseBase);
//третья перегрузка метода MouseMove
Tab1.MouseMove(lstPoints.ToArray(), lstDelays.ToArray(), true, false);
//Примечания:
//