ja ich weiß, ich werde wohl gesteinigt für meinen Wunsch, aber ich probiers
trotzdem:
Ich will die Mausposition auf dem Bildschirm ermitteln in einer Java-Anwendung.
Einfach mal ganz trivial gesagt:
public static void main(String[] s) {
System.out.println(getMousePosition());
}
Ich weiß, daß java das nur kann, wenn man Mouselistener auf java-Fenstern
anmeldet. Ich will aber die absolute Position der Maus haben, ohne ein
Java-Fenster zu haben, und außerdem nicht auf ein Fenster angewiesen sein.
Im Prinzip das Gegenteil von java.awt.Robot.mouseMove(int x, int y), was die
Maus ja an beliebige Koordinaten versetzen kann.
Ich weiß auch, daß nun als Antwort kommt, das man das nur mit JNI machen kann.
Aber ich habe keine große Lust für so eine kleine Sache mich da so
einzuarbeiten. Und auf den ersten Blick sieht mir das nicht trivial aus, wenn
man davon noch keinen Plan hat.
Auch google hat mir keinerlei vernünftige Ergebnisse gebracht. Hätte eigentlich
erwartet, das sowas schon mal wer gebraucht und veröffentlicht hätte.
Meine Bitte an die Leute, die täglich mit JNI arbeiten und sich somit auskennen:
Wäre es möglich, daß einmal zu implementieren und zur Verfügung zu stellen? Ja,
ich weiß, sowas wird nicht gerne gesehen nach fertigen Lösungen zu fragen, aber
ich will doch nur diese eine einzige Funktion haben und da steht es in keinem
vernünftigen Verhältnis, JNI komplett zu verstehen zu versuchen.
Und ja, es soll nur auf Windows laufen und ich will es nur privat auf meinem
einzigen Rechner unter Windows benutzen. Hinweise auf Plattformunabhängigkeit
und so sind daher zu vermeiden.
Gruß,
Tobias
PS: Ziemlich erbärmlich, das Java das immer noch nicht alleine kann.
So geht das leider nicht. Zum einen liefert Dir Java die Mausposition
wirklich nur bei einer Veränderung (move, click, etc.) und zum anderen auch
nur innerhalb von Java-Komponenten (z.B. Fenstern).
Du hast also zwei Möglichkeiten: 1.) JNI oder 2.) JNI
Ich bezweifle mal, daß man einfach nur ein transparentes Window in
Monitorgröße erstellen kann - auch da müßte man ja auf eine Veränderung der
Maus warten (also wieder ein move, click, etc.)
Andreas
> PS: Ziemlich erbärmlich, das Java das immer noch nicht alleine kann.
Nicht gleich über Java meckern...
http://java.sun.com/j2se/1.5.0/docs/api/java/awt/PointerInfo.html
bye
--
Stefan Matthias Aust // "Zweifel sind der Ansporn des Denkens..." -U
> Ich bezweifle mal, daß man einfach nur ein transparentes Window in
> Monitorgröße erstellen kann
By the way, wie ginge das denn ?
Kris
Mit AWT/Swing gar nicht und mit SWT vielleicht - man kann dort
unregelmäßig geformte Fenster darstellen und dann müsste auch eins
gehen, welches gar keine Form hat...
Also wenn ich das richtig verstehe ist SWT doch ein natives Gerüßt für
Guis, wie kann man da denn unregelmäßig geformte Fenster z.B ein rundes
Fenster machen? Kennst Du eine Bsp. Seite ? Würde mich jetzt brennend
interessieren.
TIA, Kris
> Also wenn ich das richtig verstehe ist SWT doch ein natives Gerüßt für
> Guis, wie kann man da denn unregelmäßig geformte Fenster z.B ein rundes
> Fenster machen? Kennst Du eine Bsp. Seite ? Würde mich jetzt brennend
> interessieren.
Da Windows und X das eh können, gibt SWT diese Möglichkeit einfach
weiter. Man definiert eine Clipping-Region, die beschreibt, welcher
teil der gedachten rechteckigen Form tatsächlich nur sichtbar sein soll.
http://dev.eclipse.org/viewcvs/index.cgi/~checkout~/platform-swt-home/snippits/snippet134.html
Wie gesagt, ich bezweifle....
:-)
Andreas
Würde vermutlich auch nicht besonders viel bringen, denn den Fokus sollen ja
nach wie vor die anderen Anwendungen haben. Aber wie Stefan Aust erwähnte,
scheint java das ab 1.5 doch zu können, werd ich gleich mal die beta installen
;)
Tobias
java.lang.Error: Unresolved compilation problems:
The method add(Rectangle) in the type Region is not applicable for the
arguments (int[])
The method subtract(int[]) is undefined for the type Region
The method subtract(int[]) is undefined for the type Region
The method setRegion(Region) is undefined for the type Shell
at Main.main(Main.java:41)
Exception in thread "main"
> Da das Snippet ja von Eclipse.org kommt wundere ich mich, dass das
> Snippet bei mir (ich verwende eclipse 2.1 auf WinXP) nicht funtioniert.
Steht da nicht (oder hätte ich sagen sollen) dass das nur mit einem
relativ neuen 3.0-Build geht? Nimm man das SWT von 3M8 oder neuer.
Thx, funzt so wie ich das will, endlich *g* Entweder war die Funktion so schwer,
so unnötig oder Sun spart extra Funktionen auf, um bei neueren Java-Versionen
auch was zu haben, was neu ist ;) Spätestens bei Java 1.2 hätte ich das nämlich
erwartet.
Gruß,
Tobias
Ich hätte noch Folgendes zu bieten:
http://developer.apple.com/documentation/Java/Reference/1.4.2/appledoc/api/com/apple/eawt/Application.html#getMouseLocationOnScreen()
Ich fürchte das wird ihm trotzdem nicht ro richtig helfen. :)
Gruß
Manuel