Программный сдвиг мыши

Обсуждение программы xStarter
Ответить
bonns
Пассажир
Сообщения: 8
Зарегистрирован: Сб окт 25, 2008 7:14 pm
Благодарил (а): 0
Поблагодарили: 0

Программный сдвиг мыши

Сообщение bonns » Пн мар 20, 2023 2:52 pm

необходимо поставить галочки в 500 чекбоксах. раз в несколько месяцев админы сдвигают формы с чекбоксами на несколько пикселей и мышь промахивается. т.е. все 500 чекбоксов сдвигаются одновременно в одну сторону (может быть вверх, вниз, вправо, влево). пытался внести поправку по X и Y в MouseMove (координата цифрой + поправка переменной) не получилось. единственный вариант, который нашел, высчитывать X и Y для 500 чекбоксов через MathOperationWithVar, но это очень муторно. может кто подскажет решение поизящнее? P.S. пообщаться с админами - просьба не предлагать ;)

Аватара пользователя
Alex
Ас
Сообщения: 2833
Зарегистрирован: Вт апр 05, 2005 3:28 pm
Откуда: Kaliningrad City
Благодарил (а): 2 раза
Поблагодарили: 91 раз
Контактная информация:

Re: Программный сдвиг мыши

Сообщение Alex » Вт мар 21, 2023 11:39 am

А что не получилось с заданием координаты через цифру и переменную? Если чекбоксы сдвинулись, в задаче правится переменная и все.

SergeK
Пилотируем с автопилотом
Сообщения: 22
Зарегистрирован: Чт янв 26, 2023 8:40 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Программный сдвиг мыши

Сообщение SergeK » Вт мар 21, 2023 12:10 pm

Здравствуйте!

Если положение чекбоксов на форме меняется, то трудно найти какое-то изящное решение задачи. К тому же из Вашего сообщения не понятно, в чём сделана форма.

Попробуйте реализовать установку чекбоксов не мышью, а с помощью клавиатуры, используя действие "Послать нажатия клавиш". Как правило, между элементами формы можно перемещаться, нажимая клавишу "Tab", или клавиши "Вверх" и "Вниз". Установка/сброс чекбокса - клавишами "Enter" или "Пробел". Если сможете сами устанавливать чекбоксы с клавиатуры, то же самое сможет сделать и xStarter. При этом их положение не будет играть никакой роли.

Если клавиатурой воспользоваться нельзя, то, возможно, поможет разработанный kain151 плагин для получения цвета пикселя и поиска по ключевым точкам изображения на экране (см. тему ниже) для определения нового положения чекбоксов.

Кроме того, мною была замечена особенность работы xStarter именно с перемещением курсора мыши. Не знаю, связано это с самим xStarter, либо с особенностями его работы в Windows 10, либо причина какая-то другая.
Особенность заключается в том, что при программном перемещении курсора в нужные координаты появляется регулярная ошибка позиционирования.
В моём случае это ошибка в 1 пиксель через каждые 255 точек по горизонтали и 88 точек по вертикали. Чем дальше позиция курсора от левого верхнего угла экрана, тем бОльшая ошибка набегает. При этом чтение координат курсора действием "КоординатыКурсораМыши" выполняется идеально без ошибок.
Обнаружил я эту особенность случайно в процессе отладки своей задачи "Визуализация файлов BMP" (есть в предыдущей теме).

Для проверки сделал простенькую задачу, которая в приложении Paint во вложенном цикле заполняет экран точками с шагом 2 по вертикали и горизонтали. При этом наглядно видны ошибки позиционирования.
Получил такую картину: (файл Ошибки_позиционирования. png в приложенном архиве)

Вот эта задача: Точки.xstk в приложенном архиве.
Сейчас в задаче заданы координаты небольшого фрагмента экрана, иначе ждать её завершения придётся долго :)
Возможно у кого-то ошибки позиционирования не попадут в заданный фрагмент. В этом случае придётся изменить его координаты. Необходимо только учесть, что выход за границы зоны отрисовки Paint чреваты непредсказуемыми последствиями из-за вероятности кликов мышью по каким-то элементам управления. Для справки: верхний левый угол зоны рисования в Paint обычно расположен в точке с координатами 7,146, а правый нижний при разрешении экрана 1920x1080 пикселей около точки с координатами 1913,1001. Координаты фрагмента экрана лучше задавать в этих границах.

Первоначально я сделал программную корректировку координат с помощью математической операции Div и порадовался, что всё получилось так просто.
Результат: Точки с простой коррекцией.xstk в приложенном архиве.

Однако радость была преждевременной. Оказалось, что указанная корректировка подходит только для экранов с разрешением 1920x1080 точек. При другом разрешении экрана шаг ошибки меняется и значения корректировок необходимо менять. Выявить зависимость шага ошибки от разрешения экрана мне не удалось.

Пришлось пойти другим путём и реализовать следующий алгоритм:
1. Устанавливаем курсор по заданным координатам.
2. Читаем его реальные координаты.
3. Определяем разницу между заданными и реальными координатами.
4. Прибавляем полученную разность к заданным координатам.
5. Устанавливаем курсор по координатам, полученным на шаге 4, добиваясь заданного его положения.

Конечно, такой алгоритм более медленный и ресурсоёмкий, зато универсальный и подходит для любых экранов.
Кроме того, опытным путём установлено, что однократная коррекция по такому алгоритму не всегда помогает, поэтому пришлось реализовать корректировку в цикле, завершая её на той итерации, когда разница между заданными и реальными координатами становится нулевой.
Реализация универсальной корректировки: файл Точки со сложной коррекцией. xstk в приложенном архиве.

Надеюсь, что приведённая здесь информация поможет кому-то реализовать свои замыслы, если не получается программно попасть мышью в заданную точку экрана.
Вложения
ОшибкиПозиционирования.zip
(12.2 КБ) 49 скачиваний
Последний раз редактировалось SergeK Ср мар 22, 2023 8:48 am, всего редактировалось 1 раз.

bonns
Пассажир
Сообщения: 8
Зарегистрирован: Сб окт 25, 2008 7:14 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Программный сдвиг мыши

Сообщение bonns » Вт мар 21, 2023 8:42 pm

Alex писал(а):
Вт мар 21, 2023 11:39 am
А что не получилось с заданием координаты через цифру и переменную? Если чекбоксы сдвинулись, в задаче правится переменная и все.
я пробовал это сделать в MouseMove в поле для X следующим образом 256+[intX] - выдает ошибку error in converting ... into integer value. [intX] задан как integer

bonns
Пассажир
Сообщения: 8
Зарегистрирован: Сб окт 25, 2008 7:14 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Программный сдвиг мыши

Сообщение bonns » Вт мар 21, 2023 9:02 pm

SergeK писал(а):
Вт мар 21, 2023 12:10 pm
Здравствуйте!

Если положение чекбоксов на форме меняется, то трудно найти какое-то изящное решение задачи. К тому же из Вашего сообщения не понятно, в чём сделана форма.

Попробуйте реализовать установку чекбоксов не мышью, а с помощью клавиатуры, используя действие "Послать нажатия клавиш". Как правило, между элементами формы можно перемещаться, нажимая клавишу "Tab", или клавиши "Вверх" и "Вниз". Установка/сброс чекбокса - клавишами "Enter" или "Пробел". Если сможете сами устанавливать чекбоксы с клавиатуры, то же самое сможет сделать и xStarter. При этом их положение не будет играть никакой роли.

Если клавиатурой воспользоваться нельзя, то, возможно, поможет разработанный kain151 плагин для получения цвета пикселя и поиска по ключевым точкам изображения на экране (см. тему ниже) для определения нового положения чекбоксов.

Кроме того, мною была замечена особенность работы xStarter именно с перемещением курсора мыши. Не знаю, связано это с самим xStarter, либо с особенностями его работы в Windows 10, либо причина какая-то другая.
Особенность заключается в том, что при программном перемещении курсора в нужные координаты появляется регулярная ошибка позиционирования.
В моём случае это ошибка в 1 пиксель через каждые 255 точек по горизонтали и 88 точек по вертикали. Чем дальше позиция курсора от левого верхнего угла экрана, тем бОльшая ошибка набегает. При этом чтение координат курсора действием "КоординатыКурсораМыши" выполняется идеально без ошибок.
Обнаружил я эту особенность случайно в процессе отладки своей задачи "Визуализация файлов BMP" (есть в предыдущей теме).

Для проверки сделал простенькую задачу, которая в приложении Paint во вложенном цикле заполняет экран точками с шагом 2 по вертикали и горизонтали. При этом наглядно видны ошибки позиционирования.
Получил такую картину: (файл Ошибки_позиционирования. png в приложенном архиве)

Вот эта задача: Точки.xstk в приложенном архиве.
Сейчас в задаче заданы координаты небольшого фрагмента экрана, иначе ждать её завершения придётся долго :)
Возможно у кого-то ошибки позиционирования не попадут в заданный фрагмент. В этом случае придётся изменить его координаты. Необходимо только учесть, что выход за границы зоны отрисовки Paint чреваты непредсказуемыми последствиями из-за вероятности кликов мышью по каким-то элементам управления. Для справки: верхний левый угол зоны рисования в Paint обычно расположен в точке с координатами 7,146, а правый нижний при разрешении экрана 1920x1080 пикселей около точки с координатами 1913,1001. Координаты фрагмента экрана лучше задавать в этих границах.

Первоначально я сделал программную корректировку координат с помощью математической операции Div и порадовался, что всё получилось так просто.
Результат: Точки с простой коррекцией.xstk в приложенном архиве.

Однако радость была преждевременной. Оказалось, что указанная корректировка подходит только для экранов с разрешением 1920x1080 точек. При другом разрешении экрана шаг ошибки меняется и значения корректировок необходимо менять. Выявить зависимость шага ошибки от разрешения экрана мне не удалось.

Пришлось пойти другим путём и реализовать следующий алгоритм:
1. Устанавливаем курсор по заданным координатам.
2. Читаем его реальные координаты.
3. Определяем разницу между заданными и реальными координатами.
4. Прибавляем полученную разность к заданным координатам.
5. Устанавливаем курсор по координатам, полученным на шаге 4, добиваясь заданного его положения.

Конечно, такой алгоритм более медленный и ресурсоёмкий, зато универсальный и подходит для любых экранов.
Кроме того, опытным путём установлено, что однократная коррекция по такому алгоритму не всегда помогает, поэтому пришлось реализовать корректировку в цикле, завершая её на той итерации, когда разница между заданными и реальными координатами становится нулевой.
Реализация универсальной корректировки: файл Точки со сложной коррекцией. xstk в приложенном архиве.

Надеюсь, что приведённая здесь информация поможет кому-то реализовать свои замыслы, если не получается программно попасть мышью в заданную точку экрана.
большой ответ )) спасибо .. по порядку
1. клавиатурой воспользоваться нет возможности, это сугубо специализированное приложение, написанное троечниками - поэтому так и работает. xStarter справляется со всеми косяками, но ребята двигают формы с чекбоксами ))) думаю и с этим справлюсь
2. про ошибку в один пиксель знаю, зависит от экрана. на домашнем компьютере такая проблема есть, на работе нет.

SergeK
Пилотируем с автопилотом
Сообщения: 22
Зарегистрирован: Чт янв 26, 2023 8:40 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Программный сдвиг мыши

Сообщение SergeK » Ср мар 22, 2023 6:14 am

bonns писал(а):
Вт мар 21, 2023 8:42 pm
я пробовал это сделать в MouseMove в поле для X следующим образом 256+[intX] - выдает ошибку error in converting ... into integer value. [intX] задан как integer
В xStarter нет возможности указывать в качестве параметров выражение. Можно только конкретное значение, результаты выполнения предыдущих действий, определённые ранее переменные или функции, выбираемые по соответствующей кнопке в окне параметров действия.
В Вашем случае необходимо отдельным действием выполнить сложение, а затем использовать результат этого действия в качестве координаты для перемещения курсора.
Последний раз редактировалось SergeK Чт мар 23, 2023 6:43 am, всего редактировалось 1 раз.

bonns
Пассажир
Сообщения: 8
Зарегистрирован: Сб окт 25, 2008 7:14 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Программный сдвиг мыши

Сообщение bonns » Ср мар 22, 2023 8:44 am

SergeK писал(а):
Ср мар 22, 2023 6:14 am
В xStarter нет возможности указывать в качестве параметров выражение. Можно только конкретное значение, результаты выполнения предыдущих действий, определённые ранее переменые или функции, выбираемые по соответствующей кнопке в окне параметров действия.
В Вашем случае необходимо отдельным действием выполнить сложение, а затем использовать результат этого действия в качестве координаты для перемещения курсора.
такой вариант я знаю, но дело в том что для каждого перемещения мыши необходимо:
1. получить координаты Х и У
2. выполнить MathOperation для Х (координата + переменная_Х)
3. выполнить MathOperation для У (координата + переменная_У)
4. вставить результат MathOperation для Х в MouseMove
5. вставить результат MathOperation для У в MouseMove
таким образом для 500 перемещений мыши надо написать 2500 строк кода, не хочу утомлять но 500 чекбоксов расположены на разных страницах, часть из них в выпадающих списках и т.д. и т.п. получается реально намного больше перемещений мыши, соответственно и больше строк кода, поэтому и ищу решение поизящнее ;)

Аватара пользователя
Alex
Ас
Сообщения: 2833
Зарегистрирован: Вт апр 05, 2005 3:28 pm
Откуда: Kaliningrad City
Благодарил (а): 2 раза
Поблагодарили: 91 раз
Контактная информация:

Re: Программный сдвиг мыши

Сообщение Alex » Ср мар 22, 2023 4:18 pm

Я такие повторяемые действия объединяю в одну задачу.
Например, задача X с действиями:

Код: Выделить всё

0. Считать параметры чекбокса (название или как его идентифицировать) из глобальной переменной
1. получить координаты Х и У
2. выполнить MathOperation для Х (координата + переменная_Х)
3. выполнить MathOperation для У (координата + переменная_У)
4. вставить результат MathOperation для Х в MouseMove
5. вставить результат MathOperation для У в MouseMove
И потом из другой задачи вызываю эту задачу:
0. Задать глобальную переменную с идентификатором чекбокса
1. Запустить задачу X с ожиданием окончания выполнения, с поиском по названию (нужен если когда то эту задачу X экспортировать/импортировать и идентификатор внутренний собьется).

SergeK
Пилотируем с автопилотом
Сообщения: 22
Зарегистрирован: Чт янв 26, 2023 8:40 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Программный сдвиг мыши

Сообщение SergeK » Ср мар 22, 2023 9:52 pm

Alex писал(а):
Ср мар 22, 2023 4:18 pm
Я такие повторяемые действия объединяю в одну задачу.
...
И потом из другой задачи вызываю эту задачу:
...
Получается прямая аналогия с вызовом подпрограммы из основной программы с передачей параметров через глобальные переменные :D
Я тоже пользовался такой возможностью.

Если координаты чекбоксов известны и нужно только вводить поправку на их положение, то я бы эти координаты обработал без подпрограмм в текстовом цикле TextLoop. В этом случае указанные 5 строк кода нужны только один раз в теле цикла. Координаты можно указать как во внешнем файле, так и непосредственно в качестве параметра текстового цикла. Для каждой пары координат нужно использовать какой-то разделитель (если ENTER, то записывать их с новой строки), а также другой разделитель между координатой X и координатой Y для получения их с помощью действия ПолучитьТекстБлокN.
В этом случае каждый раз перед запуском задачи необходимо задать только две поправки на сдвиг формы.
Пример реализации во вложении:
Вложения
Клики мышью.xstk
(8.28 КБ) 51 скачивание

bonns
Пассажир
Сообщения: 8
Зарегистрирован: Сб окт 25, 2008 7:14 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Программный сдвиг мыши

Сообщение bonns » Сб мар 25, 2023 9:06 pm

SergeK писал(а):
Ср мар 22, 2023 9:52 pm
Alex писал(а):
Ср мар 22, 2023 4:18 pm
Я такие повторяемые действия объединяю в одну задачу.
...
И потом из другой задачи вызываю эту задачу:
...
Получается прямая аналогия с вызовом подпрограммы из основной программы с передачей параметров через глобальные переменные :D
Я тоже пользовался такой возможностью.

Если координаты чекбоксов известны и нужно только вводить поправку на их положение, то я бы эти координаты обработал без подпрограмм в текстовом цикле TextLoop. В этом случае указанные 5 строк кода нужны только один раз в теле цикла. Координаты можно указать как во внешнем файле, так и непосредственно в качестве параметра текстового цикла. Для каждой пары координат нужно использовать какой-то разделитель (если ENTER, то записывать их с новой строки), а также другой разделитель между координатой X и координатой Y для получения их с помощью действия ПолучитьТекстБлокN.
В этом случае каждый раз перед запуском задачи необходимо задать только две поправки на сдвиг формы.
Пример реализации во вложении:
Супер! Спасибо большое за пример, то что надо!

bonns
Пассажир
Сообщения: 8
Зарегистрирован: Сб окт 25, 2008 7:14 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Программный сдвиг мыши

Сообщение bonns » Пн мар 27, 2023 1:06 am

Alex, по случаю хочу сказать спасибо за отличный продукт, пользуюсь уже много лет, работает даже там где запрещена установка программ и сисадмины лютуют, решает любые задачи тихо, незаметно и эффективно. Завтра зашлю благодарность на счёт :)

bonns
Пассажир
Сообщения: 8
Зарегистрирован: Сб окт 25, 2008 7:14 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Программный сдвиг мыши

Сообщение bonns » Пн мар 27, 2023 2:32 pm

Уважаемый(-ая) Nikolay F.....,
Благодарим за покупку у PayPro Global — надежного посредника электронной коммерции.
Детали вашего заказа:
xStarter Web Pilot - 1 item(s) - 49.50 USD
Счет-фактура: Скачать счет
Вы можете приступить к использованию продукта (продуктов) когда пожелаете, для этого воспользуйтесь прямыми ссылками на скачивание, приведенными ниже:
xStarter Web Pilot
Лицензионный ключ продукта(-ов):
Лицензия зарегистрирована на: Nikolay F.....

Аватара пользователя
Alex
Ас
Сообщения: 2833
Зарегистрирован: Вт апр 05, 2005 3:28 pm
Откуда: Kaliningrad City
Благодарил (а): 2 раза
Поблагодарили: 91 раз
Контактная информация:

Re: Программный сдвиг мыши

Сообщение Alex » Чт мар 30, 2023 4:57 pm

Спасибо большое за благодарности :).
Давно уже не было покупок :), а тут вот :).

Ответить