Программный сдвиг мыши
-
- Пассажир
- Сообщения: 8
- Зарегистрирован: Сб окт 25, 2008 7:14 pm
- Благодарил (а): 0
- Поблагодарили: 0
Программный сдвиг мыши
необходимо поставить галочки в 500 чекбоксах. раз в несколько месяцев админы сдвигают формы с чекбоксами на несколько пикселей и мышь промахивается. т.е. все 500 чекбоксов сдвигаются одновременно в одну сторону (может быть вверх, вниз, вправо, влево). пытался внести поправку по X и Y в MouseMove (координата цифрой + поправка переменной) не получилось. единственный вариант, который нашел, высчитывать X и Y для 500 чекбоксов через MathOperationWithVar, но это очень муторно. может кто подскажет решение поизящнее? P.S. пообщаться с админами - просьба не предлагать
- Alex
- Ас
- Сообщения: 2833
- Зарегистрирован: Вт апр 05, 2005 3:28 pm
- Откуда: Kaliningrad City
- Благодарил (а): 2 раза
- Поблагодарили: 91 раз
- Контактная информация:
Re: Программный сдвиг мыши
А что не получилось с заданием координаты через цифру и переменную? Если чекбоксы сдвинулись, в задаче правится переменная и все.
-
- Пилотируем с автопилотом
- Сообщения: 22
- Зарегистрирован: Чт янв 26, 2023 8:40 pm
- Благодарил (а): 0
- Поблагодарили: 0
Re: Программный сдвиг мыши
Здравствуйте!
Если положение чекбоксов на форме меняется, то трудно найти какое-то изящное решение задачи. К тому же из Вашего сообщения не понятно, в чём сделана форма.
Попробуйте реализовать установку чекбоксов не мышью, а с помощью клавиатуры, используя действие "Послать нажатия клавиш". Как правило, между элементами формы можно перемещаться, нажимая клавишу "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 в приложенном архиве.
Надеюсь, что приведённая здесь информация поможет кому-то реализовать свои замыслы, если не получается программно попасть мышью в заданную точку экрана.
Если положение чекбоксов на форме меняется, то трудно найти какое-то изящное решение задачи. К тому же из Вашего сообщения не понятно, в чём сделана форма.
Попробуйте реализовать установку чекбоксов не мышью, а с помощью клавиатуры, используя действие "Послать нажатия клавиш". Как правило, между элементами формы можно перемещаться, нажимая клавишу "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 раз.
-
- Пассажир
- Сообщения: 8
- Зарегистрирован: Сб окт 25, 2008 7:14 pm
- Благодарил (а): 0
- Поблагодарили: 0
Re: Программный сдвиг мыши
я пробовал это сделать в MouseMove в поле для X следующим образом 256+[intX] - выдает ошибку error in converting ... into integer value. [intX] задан как integer
-
- Пассажир
- Сообщения: 8
- Зарегистрирован: Сб окт 25, 2008 7:14 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 в приложенном архиве.
Надеюсь, что приведённая здесь информация поможет кому-то реализовать свои замыслы, если не получается программно попасть мышью в заданную точку экрана.
1. клавиатурой воспользоваться нет возможности, это сугубо специализированное приложение, написанное троечниками - поэтому так и работает. xStarter справляется со всеми косяками, но ребята двигают формы с чекбоксами ))) думаю и с этим справлюсь
2. про ошибку в один пиксель знаю, зависит от экрана. на домашнем компьютере такая проблема есть, на работе нет.
-
- Пилотируем с автопилотом
- Сообщения: 22
- Зарегистрирован: Чт янв 26, 2023 8:40 pm
- Благодарил (а): 0
- Поблагодарили: 0
Re: Программный сдвиг мыши
В xStarter нет возможности указывать в качестве параметров выражение. Можно только конкретное значение, результаты выполнения предыдущих действий, определённые ранее переменные или функции, выбираемые по соответствующей кнопке в окне параметров действия.
В Вашем случае необходимо отдельным действием выполнить сложение, а затем использовать результат этого действия в качестве координаты для перемещения курсора.
Последний раз редактировалось SergeK Чт мар 23, 2023 6:43 am, всего редактировалось 1 раз.
-
- Пассажир
- Сообщения: 8
- Зарегистрирован: Сб окт 25, 2008 7:14 pm
- Благодарил (а): 0
- Поблагодарили: 0
Re: Программный сдвиг мыши
такой вариант я знаю, но дело в том что для каждого перемещения мыши необходимо: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: Программный сдвиг мыши
Я такие повторяемые действия объединяю в одну задачу.
Например, задача X с действиями:
И потом из другой задачи вызываю эту задачу:
0. Задать глобальную переменную с идентификатором чекбокса
1. Запустить задачу X с ожиданием окончания выполнения, с поиском по названию (нужен если когда то эту задачу X экспортировать/импортировать и идентификатор внутренний собьется).
Например, задача X с действиями:
Код: Выделить всё
0. Считать параметры чекбокса (название или как его идентифицировать) из глобальной переменной
1. получить координаты Х и У
2. выполнить MathOperation для Х (координата + переменная_Х)
3. выполнить MathOperation для У (координата + переменная_У)
4. вставить результат MathOperation для Х в MouseMove
5. вставить результат MathOperation для У в MouseMove
0. Задать глобальную переменную с идентификатором чекбокса
1. Запустить задачу X с ожиданием окончания выполнения, с поиском по названию (нужен если когда то эту задачу X экспортировать/импортировать и идентификатор внутренний собьется).
-
- Пилотируем с автопилотом
- Сообщения: 22
- Зарегистрирован: Чт янв 26, 2023 8:40 pm
- Благодарил (а): 0
- Поблагодарили: 0
Re: Программный сдвиг мыши
Получается прямая аналогия с вызовом подпрограммы из основной программы с передачей параметров через глобальные переменные
Я тоже пользовался такой возможностью.
Если координаты чекбоксов известны и нужно только вводить поправку на их положение, то я бы эти координаты обработал без подпрограмм в текстовом цикле TextLoop. В этом случае указанные 5 строк кода нужны только один раз в теле цикла. Координаты можно указать как во внешнем файле, так и непосредственно в качестве параметра текстового цикла. Для каждой пары координат нужно использовать какой-то разделитель (если ENTER, то записывать их с новой строки), а также другой разделитель между координатой X и координатой Y для получения их с помощью действия ПолучитьТекстБлокN.
В этом случае каждый раз перед запуском задачи необходимо задать только две поправки на сдвиг формы.
Пример реализации во вложении:
- Вложения
-
- Клики мышью.xstk
- (8.28 КБ) 51 скачивание
-
- Пассажир
- Сообщения: 8
- Зарегистрирован: Сб окт 25, 2008 7:14 pm
- Благодарил (а): 0
- Поблагодарили: 0
Re: Программный сдвиг мыши
Супер! Спасибо большое за пример, то что надо!SergeK писал(а): ↑Ср мар 22, 2023 9:52 pmПолучается прямая аналогия с вызовом подпрограммы из основной программы с передачей параметров через глобальные переменные
Я тоже пользовался такой возможностью.
Если координаты чекбоксов известны и нужно только вводить поправку на их положение, то я бы эти координаты обработал без подпрограмм в текстовом цикле TextLoop. В этом случае указанные 5 строк кода нужны только один раз в теле цикла. Координаты можно указать как во внешнем файле, так и непосредственно в качестве параметра текстового цикла. Для каждой пары координат нужно использовать какой-то разделитель (если ENTER, то записывать их с новой строки), а также другой разделитель между координатой X и координатой Y для получения их с помощью действия ПолучитьТекстБлокN.
В этом случае каждый раз перед запуском задачи необходимо задать только две поправки на сдвиг формы.
Пример реализации во вложении:
-
- Пассажир
- Сообщения: 8
- Зарегистрирован: Сб окт 25, 2008 7:14 pm
- Благодарил (а): 0
- Поблагодарили: 0
Re: Программный сдвиг мыши
Alex, по случаю хочу сказать спасибо за отличный продукт, пользуюсь уже много лет, работает даже там где запрещена установка программ и сисадмины лютуют, решает любые задачи тихо, незаметно и эффективно. Завтра зашлю благодарность на счёт
-
- Пассажир
- Сообщения: 8
- Зарегистрирован: Сб окт 25, 2008 7:14 pm
- Благодарил (а): 0
- Поблагодарили: 0
Re: Программный сдвиг мыши
Уважаемый(-ая) Nikolay F.....,
Благодарим за покупку у PayPro Global — надежного посредника электронной коммерции.
Детали вашего заказа:
xStarter Web Pilot - 1 item(s) - 49.50 USD
Счет-фактура: Скачать счет
Вы можете приступить к использованию продукта (продуктов) когда пожелаете, для этого воспользуйтесь прямыми ссылками на скачивание, приведенными ниже:
xStarter Web Pilot
Лицензионный ключ продукта(-ов):
Лицензия зарегистрирована на: 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: Программный сдвиг мыши
Спасибо большое за благодарности .
Давно уже не было покупок , а тут вот .
Давно уже не было покупок , а тут вот .