MATLAB перемещает курсор мыши в определенные координаты

С этим немного беда. У меня есть файл MATLAB .m, и как его часть я хочу автоматически перемещать курсор мыши в определенную часть графического интерфейса фигуры, как только файл будет запущен. Я немного поискал, но у меня возникли проблемы с реализацией того, что я нашел. Одним из решений является использование Java:

import java.awt.Robot;
mouse = Robot;

mouse.mouseMove(0, 0);
screenSize = get(0, 'screensize');
for i = 1: screenSize(4)
    mouse.mouseMove(i, i);
    pause(0.00001);
end

Это переместит курсор в нижнюю часть экрана. Однако я не могу понять систему координат здесь. Я попробовал несколько различных комбинаций чисел в строке «mouse.mouseMove(i, i)», но ни одна из них не дала никакого эффекта. Каждый раз, когда я вносил изменения, он просто перемещал курсор в верхний левый угол экрана, независимо от того, что я вводил. Какие-либо предложения?

Я знаю, что есть также свойства moveptr и PointerLocation; однако я могу найти только инструкции о том, как перемещать их как часть сюжета, и я не уверен, будут ли они работать для того, что я пытаюсь сделать.


person Ryan Simmons    schedule 29.03.2012    source источник
comment
Хм, я бы очень разозлился, если бы что-то начало двигать мой указатель мыши...   -  person Oliver Charlesworth    schedule 29.03.2012
comment
Повезло тебе. Это очень полезно.   -  person Ryan Simmons    schedule 29.03.2012
comment
Ваш пример кода работает для меня в Matlab R2011b в Windows XP: указатель прыгает вверх влево, а затем скользит вниз и вправо. Может быть, вы сделали pause off перед вызовом этого? Это заставит этот цикл прокручиваться так быстро, что вы не увидите движения, и он оставит указатель в нижней части экрана. Попробуйте pause on и перезапустите его.   -  person Andrew Janke    schedule 29.03.2012


Ответы (2)


Система координат выглядит следующим образом: x=0, y=0 — это верхний левый угол вашего основного монитора. Положительный X сдвинулся слева направо. Положительный Y перемещается сверху вниз. (довольно типично)

(Кстати, вы должны использовать screenSizes = get(0, 'MonitorPositions'), а не размер экрана, так как он правильно обрабатывает несколько мониторов.)

У меня работают следующие команды:

%Setup
robot = java.awt.Robot;
screenSizes = get(0, 'MonitorPositions');

%Mouse to upper left of primary monitor
robot.mouseMove(1, 1)

%Mouse to center of primary monitor
robot.mouseMove(mean(screenSizes(1,[1 3])),mean(screenSizes(1,[2 4]))) 

%Mouse to hardcoded point 200 pixels down and 500 pixels to the right
robot.mouseMove(500, 200)

%Slow horizontal drag
for ix = 1:500
    robot.mouseMove(ix, 200);
    pause(0.01)
end

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

MATLAB Version 7.12.0.635 (R2011a)
Operating System: Microsoft Windows XP Version 5.1 (Build 2600: Service Pack 3)
Java VM Version: Java 1.6.0_31-b05 with Sun Microsystems Inc. Java HotSpot(TM) Client VM mixed mode
person Pursuit    schedule 29.03.2012

Может быть проблема pause.

Ваш пример кода работает для меня в Matlab R2011b в Windows XP: указатель прыгает вверх влево, а затем скользит вниз и вправо. Может быть, вы сделали pause off перед вызовом этого? Это заставит этот цикл прокручиваться так быстро, что вы не увидите движения, и он оставит указатель в нижней части экрана. Попробуйте pause on и перезапустите его.

person Andrew Janke    schedule 29.03.2012