2012-03-29 51 views
4

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

ええと、何かマウスポインタを動かすと、私は非常に迷惑になります。 –

+0

あなたにはいいですね。それは非常に便利です。 –

+1

Windows XPのMatlab R2011bで、あなたのサンプルコードが私に役立ちます:ポインタが左上にジャンプし、次に右に滑ります。あなたはこれを呼び出す前に '一時停止'をしたのでしょうか?そうすれば、このループはすばやく動くので、動きが見えなくなり、ポインタは画面の下に残ります。 「一時停止」して再実行してください。 –

答えて

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

すべての助けてくれてありがとう! –

3

pauseの問題があります。

あなたのサンプルコードはWindows XPのMatlab R2011bで動作します:ポインタは左上にジャンプし、次に右に滑ります。これを呼び出す前にpause offを行ったのでしょうか?そうすれば、このループはすばやく動くので、動きが見えなくなり、ポインタは画面の下に残ります。試してpause onを試して、もう一度実行してください。

関連する問題