Автокликер Clickermann :: Форум
Основной раздел => Ошибки => Topic started by: Vint on December 29, 2020, 03:31:29 PM
-
На днях столкнулся с багом. Делал скрипт под Nox и в определённый момент часть кликов перестала проходить. Изучив проблему и проведя тесты что выяснил:
если больше одного монитора и на них стоит разное разрешение, то клики/перемещения в координаты превышающие меньший монитор (или дополнительный, тут ХЗ) сбрасываются в X1max. Важно! Это происходит не всегда, а только если окно кликера (главное или редактор) находятся на меньшем мониторе.
Мой пример.
Есть 2 монитора. Основной левый 1920x1080. Дополнительный правый 1600x900
$_xmax, $_ymax кликер выдаёт 3519x1079 что суммарно правильно.
Вот демонстрационный код
MOVE(1000, 900)
LOGWRITE("X/Y ", $_xmouse, "/", $_ymouse)
HALT
На тесте пере6двигаем в координаты 1000x900 которые присутствуют всегда и находятся в области первого монитора.
Заметим, что Y больше чем максимум второго монитора 899.
При нахождении окна кликера на основном мониторе кликер двигает правильно в
15:18:59 X/Y 1000/900
При нахождении окна кликера на дополнительном мониторе курсор уходит в
15:19:07 X/Y 1919/900
т.е. координата X становится максимальной от первого монитора 1919, Y при этом сохраняется.
Кликер при нахождении на конкретном мониторе сравнивает координаты с максимальными именно этого монитора, даже если глобально они попадают не на него и в итоге ограничивает X первым монитором. Почему именно так, ну, такая ошибка.
Столкнулся, только когда окно NOX-а заняло слишком много места на экране и передвинул кликер на второй. И при этом рабочие координаты вышли за область второго монитора.
Понятно, что с этой ситуацией столкнуться только те, у кого на мониторах разное разрешение. Я вот столкнулся и мне пипец как неудобно.
-
Еще сталкивался когда два монитора и более, то некоторые видеокарты, иногда на обычный
GETSCREEN, который десятки раз, на этом скрипте и этом компе работал штатно, Выдаёт полную черноту, как при неправильной привязке.
Лечение нашёл в добавлении проверки цвета пикселя который заведомо не может быть чёрным и если он чёрный, то условие возвращает выполнение к GETSCREEN.
Проявляется такое, когда пользователь во весь экран гоняет игру с быстрым обсчётом изменяющейся графики, а на втором мониторе смотрит какое-то видео в сжатом формате или гоняет вторую копию этой игры.
Верный признак если графика игры подвисает и есть второй монитор, то подстраховываться от такого бага, а несколько мониторов встречается у людей всё чаще и чаще.
-
Интересное и полезное замечание!
Я так понимаю на виртуализацию это не распространяется, и предполагается что отдельная ВМ = 1 монитору и это ни от чего не зависит. У меня просто три монитора и везде разное разрешение.