这个有点麻烦。我有一个MATLAB .m文件,作为其中的一部分,我想在文件运行后自动将鼠标光标移动到图形GUI的特定部分。我已经做了一些搜索,但我很难实现我发现的东西。一种解决方案是使用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属性;但是,我只能找到关于如何将这些作为情节的一部分移动的说明,而我不确定它们是否适用于我正在尝试做的事情。
答案 0 :(得分:3)
可能是pause
问题。
您的示例代码在Windows XP上的Matlab R2011b中适用于我:指针跳到左上角然后向下滑动。也许你在打电话之前做过pause off
?这将使这个循环拉得很快你将看不到运动,并且它会将指针留在屏幕的底部。尝试pause on
并重新运行。
答案 1 :(得分: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