4

这个有点麻烦。我有一个 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 属性;但是,我只能找到有关如何将它们作为情节的一部分移动的说明,而且我不确定它们是否适用于我正在尝试做的事情。

4

2 回答 2

3

Could be a pause issue.

Your example code works for me in Matlab R2011b on Windows XP: the pointer jumps to the upper left and then glides down and right. Maybe you did a pause off before calling this? That'll make this loop zip through so fast you won't see the movement, and it'll leave the pointer at the bottom of the screen. Try pause on and rerun it.

于 2012-03-29T16:37:53.820 回答
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
于 2012-03-29T16:00:07.913 回答