4

これには少し問題があります。MATLAB .m ファイルがあり、その一部として、ファイルが実行されるとすぐにマウス カーソルを Figure GUI の特定の部分に自動的に移動したいと考えています。少し調べてみましたが、見つけたものの実装に問題があります。1 つの解決策は、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

問題になる可能性がありpauseます。

あなたのコード例は、Windows XP の Matlab R2011b で機能します。ポインターは左上にジャンプしてから、上下に滑ります。多分あなたはpause offこれを呼び出す前にしましたか?これにより、このループは動きが見えないほど高速になり、ポインターは画面の下部に残ります。pause on再実行してみてください。

于 2012-03-29T16:37:53.820 に答える
2

座標系は次のように表示されます。x=0、y=0 はプライマリ モニターの左上隅です。正の X は左から右に移動しました。正の Y は上から下に移動します。(かなり典型的)

screenSizes = get(0, 'MonitorPositions')(ちなみに、複数のモニターを適切に処理するため、screensize ではなく使用する必要があります。)

次のコマンドは私のために働きます:

%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 に答える