2012-03-29 174 views
4

这个问题有点麻烦。我有一个MATLAB .m文件,作为它的一部分,我想在文件运行后立即自动将鼠标光标移动到图形GUI的特定部分。我已经做了一些四处搜寻,但是在实施我找到的东西时遇到了麻烦。一种解决方案是使用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

嗯,如果有东西开始移动我的鼠标指针,我会非常恼火...... – 2012-03-29 14:32:53

+0

对你有好处。这非常有帮助。 – 2012-03-29 15:03:40

+1

您的示例代码适用于Windows XP上的Matlab R2011b:指针跳转到左上角,然后向下和向右滑动。在打电话之前,也许你做了个“暂停”这将使这个循环拉链如此之快,你不会看到运动,它会将指针留在屏幕的底部。尝试'暂停'并重新运行它。 – 2012-03-29 15:48:25

回答

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

感谢您的帮助! – 2012-03-30 14:56:43

3

可能是pause问题。

您的示例代码适用于Windows XP上的Matlab R2011b:指针跳转到左上角,然后向下和向右滑动。在打电话之前,也许你做了pause off?这将使这个循环拉链如此之快,你不会看到运动,它会将指针留在屏幕的底部。尝试pause on并重新运行它。