MATLAB переместить курсор мыши на определенные координаты - PullRequest
4 голосов
/ 29 марта 2012

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

Ответы [ 2 ]

3 голосов
/ 29 марта 2012

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

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

2 голосов
/ 29 марта 2012

Система координат выглядит следующим образом: 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
...