Тема: AHK: MouseClickDrag и позиционирование камеры
Доброго времени суток всем!
Столкнулся я еще с одной проблемой. Даже не знаю, как грамотно изложить суть проблемы. Поэтому попытаюсь "на пальцах".
В некоторых приложениях (играх, к примеру) зажав правую кнопку мыши и двигая ее, можно менять ориентацию камеры. То же самое происходит и в виртуальных 360-панорамах. Моя задача состоит в том, чтобы скрипт автоматически точно сориентировал камеру нужным образом по маркеру в панораме. Я это решил таким образом:
MouseMove, X/2, Y/2 ;Перемещение курсора в центр окна
sleep, 500
MouseClickDrag, Right, X/2, Y/2, X/2, Y/2+200, 100 ;Смещение камеры до упора вниз
sleep, 500
Loop, 600 ;Цикл дискретного смещения камеры по вертикали
{
MouseMove, X/2, Y/2 ;Перемещение курсора в центр окна
MouseClickDrag, Right, X/2, Y/2, X/2, Y/2-1, 0 ;Дискретное смещение камеры по вертикали вверх
}
sleep, 500
Loop, 960 ;Цикл дискретного смещения камеры по горизонтали
{
MouseMove, X/2, Y/2 ;Перемещение курсора в центр окна
MouseClickDrag, Right, X/2, Y/2, X/2+3, Y/2, 0 ;Дискретное смещение камеры по горизонтали вправо
PixelSearch, MX, MY, X/2-20, 0, X/2+20, Y/24, %CF%, 2, Fast ;Поиск точки заданного цвета в заданной области
if ErrorLevel = 0
Goto, Block010 ;Переход к блоку зуммирования
} В целях экономии времени и чтобы зрителю не приходилось видеть вращение камеры упертой в пол, или небо, я решил попробовать позиционировать камеру по вертикали без поиска маркера. Просто задать некоторую величину смещения относительно пола.
И вот тут я и столкнулся с проблемами. Смещение зависит от dpi мышки, это понятно. Непонятно поведение команды MouseClickDrag, если я пытаюсь смещать камеру не дискретно, а сразу на заданный угол. Скажем, такая команда
MouseClickDrag, Right, X/2, Y/2, X/2, Y/2-600, 0совсем не эквивалентна такому циклу:
Loop, 600 ;Цикл дискретного смещения камеры по вертикали
{
MouseMove, X/2, Y/2 ;Перемещение курсора в центр окна
MouseClickDrag, Right, X/2, Y/2, X/2, Y/2-1, 0 ;Дискретное смещение камеры по вертикали вверх
}Если цикл постоянно точно выводит камеру на нужный угол, то разовое смещение дает непредсказуемый результат. Один раз повернет на один угол, в другой раз на другой.
Но так как смещение зависит еще и от dpi мышки, даже работающая на моем ПК конструкция не у каждого пользователя станет работать (хотя у многих и работает). В связи с этим вопрос. Возможно ли осуществить подобные манипуляции как нибудь еще?
Я решил попробовать с вируальной мышкой, из центра специальных возможностей в Winows, но напоролся на то, что моих знаний, судя по всему, катастрофически не хватает. Я даже не смог скриптом вызвать этот режим. Плюс, даже вызвав его вручную, виртуальная мышь все равно "не видит" нажатий клавиш нумлока скриптом. Она не переходит в заданные режимы и не перемещает курсор. Я пытался использовать команду send. Но, видимо, тут нужно иначе поступать. А как, не хватает знаний.

