2012-03-29 5 views
4

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

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; однако я могу найти инструкции о том, как переместить их как часть сюжета, и я не уверен, будут ли они работать на то, что я пытаюсь сделать.

+0

Хм, мне было бы очень досадно, если бы что-то начало перемещать указатель мыши вокруг ... –

+0

Хорошо для вас. Это очень полезно. –

+1

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

ответ

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 
+0

Спасибо за помощь! –

3

Может быть pause вопрос.

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

Смежные вопросы