2012-03-29 13 views
4

Mit ein bisschen Mühe mit diesem. Ich habe eine MATLAB-.m-Datei, und als Teil davon möchte ich den Mauszeiger automatisch auf einen bestimmten Teil einer Grafik-GUI bewegen, sobald die Datei ausgeführt wird. Ich habe ein wenig herumgesucht, aber ich habe Schwierigkeiten, das zu implementieren, was ich gefunden habe. Eine Lösung ist Java zu verwenden:MATLAB Bewegen Sie den Mauszeiger zu bestimmten Koordinaten

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 

Dies bewegt den Cursor an den unteren Rand des Bildschirms. Allerdings kann ich das Koordinatensystem hier nicht herausfinden. Ich habe in der Zeile "mouse.mouseMove (i, i)" eine Reihe verschiedener Zahlenkombinationen ausprobiert, aber keine davon schien Wirkung zu zeigen. Jedes Mal, wenn ich eine Änderung vorgenommen habe, habe ich den Cursor ganz nach links oben auf dem Bildschirm bewegt, unabhängig davon, was ich eingegeben habe. Irgendwelche Vorschläge?

Ich weiß, es gibt auch moveptr und PointerLocation Eigenschaften; Ich kann jedoch nur Anweisungen finden, wie man diese als Teil einer Handlung bewegt, und ich bin mir nicht sicher, ob sie für das, was ich versuche, arbeiten würden.

+0

Hmm, ich wäre sehr genervt, wenn etwas angefangen hätte, meinen Mauszeiger zu bewegen ... –

+0

Gut für dich. Das ist sehr hilfreich. –

+1

Ihr Beispiel Code funktioniert für mich in Matlab R2011b unter Windows XP: Der Zeiger springt nach oben links und gleitet dann nach unten und rechts. Vielleicht hast du eine Pause gemacht, bevor du das angerufen hast? Dadurch wird diese Schleife so schnell durchlaufen, dass Sie die Bewegung nicht sehen und den Zeiger am unteren Bildschirmrand stehen lassen. Probieren Sie "Pause" und führen Sie es erneut aus. –

Antwort

2

Das Koordinatensystem sieht wie folgt aus: x = 0, y = 0 ist die obere linke Ecke des primären Monitors. Positives X bewegte sich von links nach rechts. Positiv Y bewegt sich von oben nach unten. (Pretty typisch)

(Übrigens, sollten Sie screenSizes = get(0, 'MonitorPositions') statt Bildschirmgröße verwenden, wie es richtig mehrere Monitore behandelt.)

die folgenden Befehle für mich arbeiten:

%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 

Übrigens Der Code, den du gepostet hast, scheint für mich zu funktionieren, indem du die Maus in einer Diagonalen von oben links nach unten rechts bewegst. Leider kann der obige Code (der für mich funktioniert) die gleichen Probleme haben, die Sie ursprünglich hatten. FWIW, meine Versionsinformationen:

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

Danke für die Hilfe! –

3

Könnte ein pause Problem sein.

Ihr Beispiel Code funktioniert für mich in Matlab R2011b auf Windows XP: Der Zeiger springt nach oben links und gleitet dann nach unten und rechts. Vielleicht hast du eine pause off vor dem Aufruf dieser? Dadurch wird diese Schleife so schnell durchlaufen, dass Sie die Bewegung nicht sehen und den Zeiger am unteren Bildschirmrand stehen lassen. Versuchen Sie pause on und führen Sie es erneut aus.

Verwandte Themen